From e202e4adf979073921455083f5e737bc4fcf5f14 Mon Sep 17 00:00:00 2001 From: CraftyOldMiner <85420839+CraftyOldMiner@users.noreply.github.com> Date: Thu, 24 Mar 2022 14:55:20 -0500 Subject: Refactor Hollows solvers, add tests, add Vec3Comparable, fix bugs (#95) --- .../core/util/Vec3ComparableTest.java | 193 ++++ .../CrystalMetalDetectorSolverTest.java | 204 ++++ .../CrystalWishingCompassSolverTest.java | 1206 ++++++++++++++++++++ 3 files changed, 1603 insertions(+) create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java (limited to 'src/test/java') diff --git a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java new file mode 100644 index 00000000..c0b451e3 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java @@ -0,0 +1,193 @@ +package io.github.moulberry.notenoughupdates.core.util; + +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class Vec3ComparableTest { + @Test + void equals_false_when_null() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c.equals(null); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_true_when_same_object() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c.equals(vec3c); + + // Assert + assertTrue(areEqual); + } + + @Test + void equals_true_when_same_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertTrue(areEqual); + } + + @Test + void equals_false_when_vec3_equals() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3 vec3c2 = new Vec3(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_false_when_different_object_type() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + BlockPos blockPos = new BlockPos(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(blockPos); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_false_when_different_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertFalse(areEqual); + } + + @Test + void hashCode_same_when_same_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + double vec3c1Hash = vec3c1.hashCode(); + double vec3c2Hash = vec3c2.hashCode(); + + // Assert + assertEquals(vec3c1Hash, vec3c2Hash); + } + + @Test + void hashCode_different_when_different_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); + + // Act + double vec3c1Hash = vec3c1.hashCode(); + double vec3c2Hash = vec3c2.hashCode(); + + // Assert + assertNotEquals(vec3c1Hash, vec3c2Hash); + } + + @Test + void compareTo_zero_when_equal() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int result = vec3c1.compareTo(vec3c2); + + // Assert + assertEquals(0, result); + } + + @Test + void compareTo_negative_when_lower() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(0.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int result = vec3c1.compareTo(vec3c2); + + // Assert + assertTrue(result < 0); + } + + @Test + void compareTo_positive_when_x_y_or_z_is_higher() { + // Arrange + Vec3Comparable vec3c1x = new Vec3Comparable(2.0, 2.0, 3.0); + Vec3Comparable vec3c2x = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c1y = new Vec3Comparable(1.0, 3.0, 3.0); + Vec3Comparable vec3c2y = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c1z = new Vec3Comparable(1.0, 2.0, 4.0); + Vec3Comparable vec3c2z = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int resultX = vec3c1x.compareTo(vec3c2x); + int resultY = vec3c1y.compareTo(vec3c2y); + int resultZ = vec3c1z.compareTo(vec3c2z); + + // Assert + assertTrue(resultX > 0); + assertTrue(resultY > 0); + assertTrue(resultZ > 0); + } + + @Test + void compareTo_throws_on_null() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act & Assert + Assertions.assertThrows(NullPointerException.class, () -> { + vec3c.compareTo(null); + }); + } + + @Test + void signumEquals_is_true_when_all_signums_match() { + Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); + Vec3 second = new Vec3(-1.0, 1.0, 0); + Assertions.assertTrue(first.signumEquals(second)); + } + + @Test + void signumEquals_is_false_when_any_signum_differs() { + Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); + Vec3 second = new Vec3(-1.0, 1.0, 1.0); + Vec3 third = new Vec3(-1.0, -1.0, 0); + Vec3 fourth = new Vec3(1.0, 1.0, 1.0); + Assertions.assertFalse(first.signumEquals(second)); + Assertions.assertFalse(first.signumEquals(third)); + Assertions.assertFalse(first.signumEquals(fourth)); + } +} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java new file mode 100644 index 00000000..58233410 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java @@ -0,0 +1,204 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalMetalDetectorSolver.SolutionState; +import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; +import net.minecraft.util.BlockPos; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +import java.util.ArrayList; + +class CrystalMetalDetectorSolverTest { + class Location { + double distance; + Vec3Comparable playerPosition; + SolutionState expectedState; + boolean centerKnown; + + public Location(double distance, + Vec3Comparable playerPosition, + SolutionState expectedState, + boolean centerKnown) { + this.distance = distance; + this.playerPosition = playerPosition; + this.expectedState = expectedState; + this.centerKnown = centerKnown; + } + } + + class Solution { + ArrayList locations = new ArrayList<>(); + BlockPos center = BlockPos.ORIGIN; + BlockPos expectedSolution = BlockPos.ORIGIN; + } + + @BeforeEach + void setUp() { + CrystalMetalDetectorSolver.initWorld(); + CrystalMetalDetectorSolver.treasureAllowedPredicate = blockPos -> true; + NEUDebugLogger.logMethod = CrystalMetalDetectorSolverTest::neuDebugLog; + NEUDebugLogger.allFlagsEnabled = true; + } + + private void findPossibleSolutionsTwice(Location loc, boolean centerNewlyDiscovered) { + // Each location has to be received twice to be valid + CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, centerNewlyDiscovered); + CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, false); + } + + private void checkSolution(Solution solution) { + boolean centerSet = false; + int index = 0; + for (Location loc : solution.locations) { + if (loc.centerKnown && !centerSet && !solution.center.equals(BlockPos.ORIGIN)) { + CrystalMetalDetectorSolver.setMinesCenter(solution.center); + centerSet = true; + findPossibleSolutionsTwice(loc, true); + } else { + findPossibleSolutionsTwice(loc, false); + } + Assertions.assertEquals(loc.expectedState, + CrystalMetalDetectorSolver.currentState, + "Location index " + index); + index++; + } + + Assertions.assertEquals(solution.expectedSolution, CrystalMetalDetectorSolver.getSolution()); + } + + @Test + void findPossibleSolutions_single_location_sample_is_ignored() { + Location location = new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false); + + CrystalMetalDetectorSolver.findPossibleSolutions(location.distance, location.playerPosition, false); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, + "Previous state"); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.currentState, + "Current state"); + } + + @Test + void findPossibleSolutions_currentState_becomes_previousState() { + Location location = new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false); + + findPossibleSolutionsTwice(location, false); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, + "Previous state"); + Assertions.assertEquals(location.expectedState, CrystalMetalDetectorSolver.currentState, + "Current state"); + } + + @Test + void findPossibleSolutions_state_is_invalid_when_solution_and_distance_mismatch() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.expectedSolution = new BlockPos(722, 67, 590); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.FOUND_KNOWN, + true)); + // slightly different player position with invalid distance + solution.locations.add(new Location(4.0, + new Vec3Comparable(757.8235166144441, 69.0, 532.8037800566217), + SolutionState.INVALID, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_failed_when_second_location_eliminates_all_blocks() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.locations.add(new Location(29.4, + new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), + SolutionState.MULTIPLE_KNOWN, + true)); + solution.locations.add(new Location(4.0, // actual distance should be 38.2 + new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), + SolutionState.FAILED, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_found_known_when_center_found_after_location() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.MULTIPLE, + false)); + checkSolution(solution); + + solution.locations.get(0).centerKnown = true; + solution.locations.get(0).expectedState = SolutionState.FOUND_KNOWN; + solution.expectedSolution = new BlockPos(722, 67, 590); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_found_when_single_known_location() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.expectedSolution = new BlockPos(722, 67, 590); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.FOUND_KNOWN, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_states_are_correct_using_multiple_locations_with_unknown_center() { + Solution solution = new Solution(); + solution.locations.add(new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false)); + solution.locations.add(new Location(34.8, + new Vec3Comparable(782.6999999880791, 71.0, 508.69999998807907), + SolutionState.FOUND, + false)); + solution.expectedSolution = new BlockPos(758, 67, 533); + + checkSolution(solution); + } + + @Test + void findPossibleSolutions_states_are_correct_when_multiple_known_locations_found() { + Solution solution = new Solution(); + + // First, validate that the solution doesn't work without the center + solution.locations.add(new Location(29.4, + new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), + SolutionState.MULTIPLE, + false)); + solution.locations.add(new Location(38.2, + new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), + SolutionState.MULTIPLE, + false)); + checkSolution(solution); + + // Now validate that the solution works with the center + CrystalMetalDetectorSolver.resetSolution(false); + solution.locations.get(0).expectedState = SolutionState.MULTIPLE_KNOWN; + solution.locations.get(0).centerKnown = true; + solution.locations.get(1).expectedState = SolutionState.FOUND_KNOWN; + solution.locations.get(1).centerKnown = true; + solution.expectedSolution = new BlockPos(748, 66, 578); + solution.center = new BlockPos(736, 88, 547); + checkSolution(solution); + } + + private static void neuDebugLog(String message) { + System.out.println(message); + } +} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java new file mode 100644 index 00000000..ed39a505 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java @@ -0,0 +1,1206 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.CompassTarget; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.HandleCompassResult; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.SolverState; +import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; + +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.*; + +class CrystalWishingCompassSolverTest { + private static final CrystalWishingCompassSolver solver = getInstance(); + long systemTimeMillis; + private final long DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE = 500L; + + private final CompassUse minesOfDivanCompassUse1 = new CompassUse( + 1647528732979L, + new BlockPos(754, 137, 239), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137), + new ParticleSpawn(new Vec3Comparable(754.315735, 138.444351, 239.690521), 45), + new ParticleSpawn(new Vec3Comparable(754.272278, 138.352051, 240.180008), 51), + new ParticleSpawn(new Vec3Comparable(754.228760, 138.259750, 240.669479), 49), + new ParticleSpawn(new Vec3Comparable(754.185303, 138.167435, 241.158966), 57), + new ParticleSpawn(new Vec3Comparable(754.141846, 138.075134, 241.648438), 50), + new ParticleSpawn(new Vec3Comparable(754.098328, 137.982819, 242.137909), 51), + new ParticleSpawn(new Vec3Comparable(754.054871, 137.890518, 242.627396), 57), + new ParticleSpawn(new Vec3Comparable(754.011353, 137.798203, 243.116867), 44), + new ParticleSpawn(new Vec3Comparable(753.967896, 137.705887, 243.606354), 59), + new ParticleSpawn(new Vec3Comparable(753.924438, 137.613586, 244.095825), 35), + new ParticleSpawn(new Vec3Comparable(753.880920, 137.521271, 244.585297), 48), + new ParticleSpawn(new Vec3Comparable(753.837463, 137.428970, 245.074783), 70), + new ParticleSpawn(new Vec3Comparable(753.793945, 137.336655, 245.564255), 33), + new ParticleSpawn(new Vec3Comparable(753.750488, 137.244354, 246.053741), 55), + new ParticleSpawn(new Vec3Comparable(753.707031, 137.152039, 246.543213), 42), + new ParticleSpawn(new Vec3Comparable(753.663513, 137.059738, 247.032700), 56), + new ParticleSpawn(new Vec3Comparable(753.620056, 136.967422, 247.522171), 48), + new ParticleSpawn(new Vec3Comparable(753.576538, 136.875122, 248.011642), 56), + new ParticleSpawn(new Vec3Comparable(754.333618, 138.527710, 239.197800), 55) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse minesOfDivanCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(760, 134, 266), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(759.686951, 135.524994, 266.190704), 129), + new ParticleSpawn(new Vec3Comparable(759.625183, 135.427887, 266.677277), 69), + new ParticleSpawn(new Vec3Comparable(759.561707, 135.330704, 267.163635), 31), + new ParticleSpawn(new Vec3Comparable(759.498230, 135.233536, 267.649963), 115), + new ParticleSpawn(new Vec3Comparable(759.434753, 135.136368, 268.136322), 0), + new ParticleSpawn(new Vec3Comparable(759.371277, 135.039200, 268.622650), 46), + new ParticleSpawn(new Vec3Comparable(759.307800, 134.942017, 269.109009), 49), + new ParticleSpawn(new Vec3Comparable(759.244324, 134.844849, 269.595337), 59), + new ParticleSpawn(new Vec3Comparable(759.180847, 134.747681, 270.081696), 45), + new ParticleSpawn(new Vec3Comparable(759.117371, 134.650513, 270.568024), 39), + new ParticleSpawn(new Vec3Comparable(759.053894, 134.553329, 271.054352), 67), + new ParticleSpawn(new Vec3Comparable(758.990356, 134.456161, 271.540710), 49), + new ParticleSpawn(new Vec3Comparable(758.926880, 134.358994, 272.027039), 32), + new ParticleSpawn(new Vec3Comparable(758.863403, 134.261826, 272.513397), 61), + new ParticleSpawn(new Vec3Comparable(758.799927, 134.164642, 272.999725), 44), + new ParticleSpawn(new Vec3Comparable(758.736450, 134.067474, 273.486084), 48), + new ParticleSpawn(new Vec3Comparable(758.672974, 133.970306, 273.972412), 57), + new ParticleSpawn(new Vec3Comparable(758.609497, 133.873138, 274.458740), 55), + new ParticleSpawn(new Vec3Comparable(758.546021, 133.775955, 274.945099), 59), + new ParticleSpawn(new Vec3Comparable(758.482544, 133.678787, 275.431427), 38), + new ParticleSpawn(new Vec3Comparable(759.636658, 135.522827, 266.186371), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i minesOfDivanSolution = new Vec3i(735, 98, 451); + + private final CompassUse goblinHoldoutCompassUse1 = new CompassUse( + 1647776326763L, + new BlockPos(454, 87, 776), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(454.171722, 88.616852, 775.807190), 188), + new ParticleSpawn(new Vec3Comparable(454.010315, 88.613464, 775.333984), 44), + new ParticleSpawn(new Vec3Comparable(453.849243, 88.610069, 774.860657), 61), + new ParticleSpawn(new Vec3Comparable(453.688141, 88.606674, 774.387329), 51), + new ParticleSpawn(new Vec3Comparable(453.527069, 88.603271, 773.914001), 40), + new ParticleSpawn(new Vec3Comparable(453.365997, 88.599876, 773.440674), 57), + new ParticleSpawn(new Vec3Comparable(453.204926, 88.596481, 772.967346), 45), + new ParticleSpawn(new Vec3Comparable(453.043854, 88.593086, 772.494019), 49), + new ParticleSpawn(new Vec3Comparable(452.882782, 88.589691, 772.020691), 46), + new ParticleSpawn(new Vec3Comparable(452.721710, 88.586288, 771.547302), 65), + new ParticleSpawn(new Vec3Comparable(452.560638, 88.582893, 771.073975), 43), + new ParticleSpawn(new Vec3Comparable(452.399567, 88.579498, 770.600647), 50), + new ParticleSpawn(new Vec3Comparable(452.238495, 88.576103, 770.127319), 48), + new ParticleSpawn(new Vec3Comparable(452.077423, 88.572701, 769.653992), 47), + new ParticleSpawn(new Vec3Comparable(451.916351, 88.569305, 769.180664), 60), + new ParticleSpawn(new Vec3Comparable(451.755280, 88.565910, 768.707336), 40), + new ParticleSpawn(new Vec3Comparable(451.594208, 88.562515, 768.234009), 69), + new ParticleSpawn(new Vec3Comparable(451.433136, 88.559120, 767.760681), 40), + new ParticleSpawn(new Vec3Comparable(451.272064, 88.555717, 767.287354), 42), + new ParticleSpawn(new Vec3Comparable(454.183441, 88.616600, 775.803040), 54) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse goblinHoldoutCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(439, 85, 777), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(439.068848, 86.624870, 776.043701), 136), + new ParticleSpawn(new Vec3Comparable(438.936066, 86.625786, 775.561646), 46), + new ParticleSpawn(new Vec3Comparable(438.804352, 86.626595, 775.079346), 65), + new ParticleSpawn(new Vec3Comparable(438.672699, 86.627396, 774.596985), 40), + new ParticleSpawn(new Vec3Comparable(438.541016, 86.628197, 774.114624), 51), + new ParticleSpawn(new Vec3Comparable(438.409332, 86.628998, 773.632263), 50), + new ParticleSpawn(new Vec3Comparable(438.277679, 86.629799, 773.149902), 50), + new ParticleSpawn(new Vec3Comparable(438.145996, 86.630608, 772.667603), 56), + new ParticleSpawn(new Vec3Comparable(438.014343, 86.631409, 772.185242), 40), + new ParticleSpawn(new Vec3Comparable(437.882660, 86.632210, 771.702881), 65), + new ParticleSpawn(new Vec3Comparable(437.751007, 86.633011, 771.220520), 45), + new ParticleSpawn(new Vec3Comparable(437.619324, 86.633812, 770.738159), 42), + new ParticleSpawn(new Vec3Comparable(437.487671, 86.634613, 770.255798), 60), + new ParticleSpawn(new Vec3Comparable(437.355988, 86.635414, 769.773499), 51), + new ParticleSpawn(new Vec3Comparable(437.224335, 86.636215, 769.291138), 44), + new ParticleSpawn(new Vec3Comparable(437.092651, 86.637024, 768.808777), 56), + new ParticleSpawn(new Vec3Comparable(436.960999, 86.637825, 768.326416), 56), + new ParticleSpawn(new Vec3Comparable(436.829315, 86.638626, 767.844055), 40), + new ParticleSpawn(new Vec3Comparable(436.697632, 86.639427, 767.361694), 50), + new ParticleSpawn(new Vec3Comparable(436.565979, 86.640228, 766.879395), 46), + new ParticleSpawn(new Vec3Comparable(439.108551, 86.620811, 776.031067), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i goblinHoldoutKingSolution = new Vec3i(377, 87, 550); + Vec3i goblinHoldoutQueenSolution = new Vec3i(322, 139, 769); + + private final CompassUse precursorCityCompassUse1 = new CompassUse( + 1647744920365L, + new BlockPos(570, 120, 565), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(570.428955, 121.630745, 565.674500), 192), + new ParticleSpawn(new Vec3Comparable(570.572998, 121.642563, 566.153137), 52), + new ParticleSpawn(new Vec3Comparable(570.714233, 121.654442, 566.632629), 45), + new ParticleSpawn(new Vec3Comparable(570.855286, 121.666321, 567.112183), 51), + new ParticleSpawn(new Vec3Comparable(570.996338, 121.678200, 567.591736), 0), + new ParticleSpawn(new Vec3Comparable(571.137390, 121.690079, 568.071289), 111), + new ParticleSpawn(new Vec3Comparable(571.278442, 121.701958, 568.550781), 38), + new ParticleSpawn(new Vec3Comparable(571.419495, 121.713844, 569.030334), 51), + new ParticleSpawn(new Vec3Comparable(571.560547, 121.725723, 569.509888), 49), + new ParticleSpawn(new Vec3Comparable(571.701599, 121.737602, 569.989441), 0), + new ParticleSpawn(new Vec3Comparable(571.842651, 121.749481, 570.468994), 101), + new ParticleSpawn(new Vec3Comparable(571.983704, 121.761360, 570.948547), 53), + new ParticleSpawn(new Vec3Comparable(572.124756, 121.773239, 571.428101), 47), + new ParticleSpawn(new Vec3Comparable(572.265747, 121.785118, 571.907654), 49), + new ParticleSpawn(new Vec3Comparable(572.406799, 121.796997, 572.387207), 49), + new ParticleSpawn(new Vec3Comparable(572.547852, 121.808876, 572.866699), 51), + new ParticleSpawn(new Vec3Comparable(572.688904, 121.820755, 573.346252), 57), + new ParticleSpawn(new Vec3Comparable(572.829956, 121.832634, 573.825806), 42), + new ParticleSpawn(new Vec3Comparable(572.971008, 121.844513, 574.305359), 50), + new ParticleSpawn(new Vec3Comparable(573.112061, 121.856392, 574.784912), 52), + new ParticleSpawn(new Vec3Comparable(570.372192, 121.631874, 565.694946), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse precursorCityCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(591, 136, 579), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(590.847961, 137.589584, 579.776672), 192), + new ParticleSpawn(new Vec3Comparable(590.918945, 137.528259, 580.267761), 50), + new ParticleSpawn(new Vec3Comparable(590.985229, 137.465118, 580.759338), 56), + new ParticleSpawn(new Vec3Comparable(591.051147, 137.401855, 581.250916), 47), + new ParticleSpawn(new Vec3Comparable(591.117126, 137.338593, 581.742493), 47), + new ParticleSpawn(new Vec3Comparable(591.183044, 137.275330, 582.234070), 49), + new ParticleSpawn(new Vec3Comparable(591.249023, 137.212067, 582.725647), 60), + new ParticleSpawn(new Vec3Comparable(591.314941, 137.148804, 583.217224), 55), + new ParticleSpawn(new Vec3Comparable(591.380920, 137.085541, 583.708801), 47), + new ParticleSpawn(new Vec3Comparable(591.446838, 137.022263, 584.200378), 50), + new ParticleSpawn(new Vec3Comparable(591.512817, 136.959000, 584.691956), 39), + new ParticleSpawn(new Vec3Comparable(591.578735, 136.895737, 585.183533), 53), + new ParticleSpawn(new Vec3Comparable(591.644714, 136.832474, 585.675110), 53), + new ParticleSpawn(new Vec3Comparable(591.710632, 136.769211, 586.166687), 45), + new ParticleSpawn(new Vec3Comparable(591.776611, 136.705948, 586.658264), 79), + new ParticleSpawn(new Vec3Comparable(591.842529, 136.642685, 587.149841), 20), + new ParticleSpawn(new Vec3Comparable(591.908508, 136.579407, 587.641418), 62), + new ParticleSpawn(new Vec3Comparable(591.974426, 136.516144, 588.132996), 48), + new ParticleSpawn(new Vec3Comparable(592.040344, 136.452881, 588.624573), 40), + new ParticleSpawn(new Vec3Comparable(592.106323, 136.389618, 589.116150), 51), + new ParticleSpawn(new Vec3Comparable(590.766357, 137.556885, 579.791565), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i precursorCitySolution = new Vec3i(604, 124, 681); + + private final CompassUse jungleCompassUse1 = new CompassUse( + 1647744980313L, + new BlockPos(454, 122, 459), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(453.954895, 122.958122, 458.687866), 141), + new ParticleSpawn(new Vec3Comparable(453.515991, 122.760010, 458.553314), 59), + new ParticleSpawn(new Vec3Comparable(453.078156, 122.560112, 458.417877), 41), + new ParticleSpawn(new Vec3Comparable(452.640381, 122.360123, 458.282349), 50), + new ParticleSpawn(new Vec3Comparable(452.202606, 122.160133, 458.146851), 66), + new ParticleSpawn(new Vec3Comparable(451.764832, 121.960136, 458.011353), 35), + new ParticleSpawn(new Vec3Comparable(451.327057, 121.760147, 457.875854), 49), + new ParticleSpawn(new Vec3Comparable(450.889313, 121.560150, 457.740356), 50), + new ParticleSpawn(new Vec3Comparable(450.451538, 121.360161, 457.604858), 49), + new ParticleSpawn(new Vec3Comparable(450.013763, 121.160172, 457.469330), 51), + new ParticleSpawn(new Vec3Comparable(449.575989, 120.960175, 457.333832), 59), + new ParticleSpawn(new Vec3Comparable(449.138214, 120.760185, 457.198334), 41), + new ParticleSpawn(new Vec3Comparable(448.700439, 120.560196, 457.062836), 55), + new ParticleSpawn(new Vec3Comparable(448.262695, 120.360199, 456.927338), 50), + new ParticleSpawn(new Vec3Comparable(447.824921, 120.160210, 456.791840), 49), + new ParticleSpawn(new Vec3Comparable(447.387146, 119.960213, 456.656311), 53), + new ParticleSpawn(new Vec3Comparable(446.949371, 119.760223, 456.520813), 43), + new ParticleSpawn(new Vec3Comparable(446.511597, 119.560234, 456.385315), 51), + new ParticleSpawn(new Vec3Comparable(446.073853, 119.360237, 456.249817), 49), + new ParticleSpawn(new Vec3Comparable(445.636078, 119.160248, 456.114319), 56), + new ParticleSpawn(new Vec3Comparable(453.975647, 122.920158, 458.668488), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse jungleCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(438, 126, 468), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(437.701721, 127.395279, 467.455048), 139), + new ParticleSpawn(new Vec3Comparable(437.297852, 127.161415, 467.275604), 35), + new ParticleSpawn(new Vec3Comparable(436.895813, 126.927208, 467.092529), 68), + new ParticleSpawn(new Vec3Comparable(436.493896, 126.692986, 466.909241), 41), + new ParticleSpawn(new Vec3Comparable(436.091980, 126.458763, 466.725952), 54), + new ParticleSpawn(new Vec3Comparable(435.690033, 126.224533, 466.542664), 39), + new ParticleSpawn(new Vec3Comparable(435.288116, 125.990311, 466.359375), 52), + new ParticleSpawn(new Vec3Comparable(434.886200, 125.756088, 466.176086), 66), + new ParticleSpawn(new Vec3Comparable(434.484283, 125.521866, 465.992767), 40), + new ParticleSpawn(new Vec3Comparable(434.082367, 125.287636, 465.809479), 41), + new ParticleSpawn(new Vec3Comparable(433.680420, 125.053413, 465.626190), 50), + new ParticleSpawn(new Vec3Comparable(433.278503, 124.819191, 465.442902), 59), + new ParticleSpawn(new Vec3Comparable(432.876587, 124.584969, 465.259613), 54), + new ParticleSpawn(new Vec3Comparable(432.474670, 124.350746, 465.076294), 38), + new ParticleSpawn(new Vec3Comparable(432.072723, 124.116516, 464.893005), 63), + new ParticleSpawn(new Vec3Comparable(431.670807, 123.882294, 464.709717), 36), + new ParticleSpawn(new Vec3Comparable(431.268890, 123.648071, 464.526428), 64), + new ParticleSpawn(new Vec3Comparable(430.866974, 123.413849, 464.343140), 48), + new ParticleSpawn(new Vec3Comparable(430.465057, 123.179619, 464.159821), 53), + new ParticleSpawn(new Vec3Comparable(430.063110, 122.945396, 463.976532), 46), + new ParticleSpawn(new Vec3Comparable(437.732666, 127.385803, 467.381592), 1) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i jungleSolution = new Vec3i(343, 72, 424); + Vec3i jungleSolutionTempleDoor = new Vec3i( + jungleSolution.getX() - 57, + jungleSolution.getY() + 36, + jungleSolution.getZ() -21); + + private final CompassUse magmaCompassUse1 = new CompassUse( + 1647745029814L, + new BlockPos(462, 58, 550), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(462.226898, 59.614380, 550.032654), 160), + new ParticleSpawn(new Vec3Comparable(462.693848, 59.609089, 549.853943), 47), + new ParticleSpawn(new Vec3Comparable(463.160706, 59.603809, 549.674988), 48), + new ParticleSpawn(new Vec3Comparable(463.627533, 59.598526, 549.496033), 136), + new ParticleSpawn(new Vec3Comparable(464.094391, 59.593246, 549.317017), 0), + new ParticleSpawn(new Vec3Comparable(464.561218, 59.587963, 549.138062), 0), + new ParticleSpawn(new Vec3Comparable(465.028076, 59.582684, 548.959106), 53), + new ParticleSpawn(new Vec3Comparable(465.494904, 59.577400, 548.780090), 48), + new ParticleSpawn(new Vec3Comparable(465.961761, 59.572117, 548.601135), 55), + new ParticleSpawn(new Vec3Comparable(466.428589, 59.566837, 548.422180), 47), + new ParticleSpawn(new Vec3Comparable(466.895416, 59.561554, 548.243164), 46), + new ParticleSpawn(new Vec3Comparable(467.362274, 59.556274, 548.064209), 53), + new ParticleSpawn(new Vec3Comparable(467.829102, 59.550991, 547.885254), 50), + new ParticleSpawn(new Vec3Comparable(468.295959, 59.545712, 547.706238), 54), + new ParticleSpawn(new Vec3Comparable(468.762787, 59.540428, 547.527283), 52), + new ParticleSpawn(new Vec3Comparable(469.229645, 59.535145, 547.348328), 105), + new ParticleSpawn(new Vec3Comparable(469.696472, 59.529865, 547.169312), 1), + new ParticleSpawn(new Vec3Comparable(470.163300, 59.524582, 546.990356), 51), + new ParticleSpawn(new Vec3Comparable(470.630157, 59.519302, 546.811401), 40), + new ParticleSpawn(new Vec3Comparable(471.096985, 59.514019, 546.632385), 49), + new ParticleSpawn(new Vec3Comparable(462.221954, 59.614719, 550.019165), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse magmaCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(449, 53, 556), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(449.120911, 54.624340, 556.108948), 204), + new ParticleSpawn(new Vec3Comparable(449.587433, 54.627399, 555.929138), 102), + new ParticleSpawn(new Vec3Comparable(450.053741, 54.630432, 555.748657), 0), + new ParticleSpawn(new Vec3Comparable(450.520020, 54.633465, 555.568237), 62), + new ParticleSpawn(new Vec3Comparable(450.986298, 54.636497, 555.387756), 38), + new ParticleSpawn(new Vec3Comparable(451.452606, 54.639530, 555.207275), 48), + new ParticleSpawn(new Vec3Comparable(451.918884, 54.642563, 555.026794), 63), + new ParticleSpawn(new Vec3Comparable(452.385162, 54.645596, 554.846375), 52), + new ParticleSpawn(new Vec3Comparable(452.851471, 54.648628, 554.665894), 35), + new ParticleSpawn(new Vec3Comparable(453.317749, 54.651661, 554.485413), 53), + new ParticleSpawn(new Vec3Comparable(453.784027, 54.654694, 554.304993), 54), + new ParticleSpawn(new Vec3Comparable(454.250305, 54.657726, 554.124512), 50), + new ParticleSpawn(new Vec3Comparable(454.716614, 54.660759, 553.944031), 55), + new ParticleSpawn(new Vec3Comparable(455.182892, 54.663792, 553.763550), 49), + new ParticleSpawn(new Vec3Comparable(455.649170, 54.666824, 553.583130), 41), + new ParticleSpawn(new Vec3Comparable(456.115479, 54.669857, 553.402649), 48), + new ParticleSpawn(new Vec3Comparable(456.581757, 54.672890, 553.222168), 54), + new ParticleSpawn(new Vec3Comparable(457.048035, 54.675922, 553.041687), 45), + new ParticleSpawn(new Vec3Comparable(457.514313, 54.678959, 552.861267), 55), + new ParticleSpawn(new Vec3Comparable(449.110443, 54.623035, 556.079163), 49) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i magmaSolution = new Vec3i(737, 56, 444); + + Vec3Comparable kingMinesOrNucleusCoordsInRemnants = new Vec3Comparable(604, 100, 681); + Vec3Comparable odawaSolution = new Vec3Comparable(349, 110, 390); + + private final CompassUse nucleusCompass = new CompassUse( + 1647745029814L, + new BlockPos(512, 106, 512), + null, + HandleCompassResult.PLAYER_IN_NUCLEUS, + SolverState.NOT_STARTED); + + private void resetSolverState() { + solver.initWorld(); + systemTimeMillis = 0; + solver.currentTimeMillis = () -> (systemTimeMillis); + // These must be overridden for all test cases or an exception will be thrown when + // data that is only present when running in the context of Minecraft is accessed. + solver.keyInInventory = () -> false; + solver.kingsScentPresent = () -> false; + solver.foundCrystals = () -> EnumSet.noneOf(Crystal.class); + } + + @BeforeEach + void setUp() { + NEUDebugLogger.logMethod = CrystalWishingCompassSolverTest::neuDebugLog; + NEUDebugLogger.allFlagsEnabled = true; + resetSolverState(); + } + + private void checkSolution(Solution solution) { + int index = 0; + for (CompassUse compassUse : solution.compassUses) { + systemTimeMillis += compassUse.timeIncrementMillis; + HandleCompassResult handleCompassResult = solver.handleCompassUse(compassUse.playerPos); + Assertions.assertEquals(compassUse.expectedHandleCompassUseResult, + handleCompassResult, + "CompassUse index " + index); + + for (ParticleSpawn particle : compassUse.particles) { + systemTimeMillis += particle.timeIncrementMillis; + solver.solveUsingParticle( + particle.spawnLocation.xCoord, + particle.spawnLocation.yCoord, + particle.spawnLocation.zCoord, + systemTimeMillis); + } + + Assertions.assertEquals(compassUse.expectedSolverState, + solver.getSolverState(), + "CompassUse index " + index); + if (compassUse.expectedSolverState == SolverState.SOLVED) { + Assertions.assertEquals(solution.expectedSolutionCoords, + solver.getSolutionCoords()); + } + + index++; + } + } + + @Test + void first_compass_without_particles_sets_solver_state_to_processing_first_use() { + // Arrange + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.clear(); + compassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; + + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void new_compass_resets_processing_first_use_state_after_timeout() { + // Arrange + CompassUse processingFirstUseCompassUse = new CompassUse(minesOfDivanCompassUse1); + processingFirstUseCompassUse.particles.clear(); + processingFirstUseCompassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; + Solution processingFirstUseSolution = new Solution( + new ArrayList<>(Collections.singletonList(processingFirstUseCompassUse)), + Vec3i.NULL_VECTOR); + checkSolution(processingFirstUseSolution); + Assertions.assertEquals(SolverState.PROCESSING_FIRST_USE, solver.getSolverState()); + + CompassUse resetStateCompassUse = new CompassUse(jungleCompassUse1); + resetStateCompassUse.timeIncrementMillis = ALL_PARTICLES_MAX_MILLIS + 1; + resetStateCompassUse.expectedHandleCompassUseResult = HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; + resetStateCompassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; + Solution goodSolution = new Solution( + new ArrayList<>(Collections.singletonList(resetStateCompassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(goodSolution); + } + + @Test + void first_compass_with_repeating_particles_sets_state_to_need_second_compass() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void first_compass_in_nucleus_sets_state_to_player_in_nucleus() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(nucleusCompass)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void use_while_handling_previous_returns_still_processing_first_use() { + // Arrange + CompassUse compassUse1 = new CompassUse( + 1647528732979L, + new BlockPos(754, 137, 239), + new ArrayList<>(Collections.singletonList( + new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137) + )), + HandleCompassResult.SUCCESS, + SolverState.PROCESSING_FIRST_USE); + + // STILL_PROCESSING_FIRST_USE is expected instead of LOCATION_TOO_CLOSE since the solver + // isn't ready for the second compass use, which includes the location check + CompassUse compassUse2 = new CompassUse(compassUse1); + compassUse2.expectedHandleCompassUseResult = HandleCompassResult.STILL_PROCESSING_PRIOR_USE; + compassUse2.timeIncrementMillis = 500; + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void missing_repeating_particles_sets_state_to_failed_timeout_no_repeating() { + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.remove(compassUse.particles.size()-1); + compassUse.particles.get(compassUse.particles.size()-1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; + compassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; + + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void compasses_too_close_returns_location_too_close_and_solver_state_is_still_need_second_compass() { + // Arrange + CompassUse secondCompassUse = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + minesOfDivanCompassUse1.playerPos.add(2, 2, 2), + null, + HandleCompassResult.LOCATION_TOO_CLOSE, + SolverState.NEED_SECOND_COMPASS + ); + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, secondCompassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_sets_solver_state_to_processing_second_use() { + // Arrange + CompassUse secondCompassUse = new CompassUse(minesOfDivanCompassUse2); + secondCompassUse.expectedSolverState = SolverState.PROCESSING_SECOND_USE; + secondCompassUse.particles.clear(); + + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_with_repeating_particles_sets_state_to_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void particles_from_first_compass_are_ignored_by_second_compass() { + // Arrange + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + compassUse2.particles.add(0, minesOfDivanCompassUse1.particles.get(0)); + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + private void execInvalidParticlesInvalidSolution() { + // Arrange + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + + // reverse the direction of the particles, moving the repeat particle + // to "new" end + compassUse2.particles.remove(compassUse2.particles.size()-1); + Collections.reverse(compassUse2.particles); + // add a new repeat particle + compassUse2.particles.add(new ParticleSpawn(compassUse2.particles.get(0))); + + // Adjust the player position + compassUse2.playerPos = new BlockPos(compassUse2.particles.get(0).spawnLocation); + compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_with_inverted_particles_sets_state_to_invalid_solution() { + // Arrange, Act, and Assert + execInvalidParticlesInvalidSolution(); + } + + @Test + void solution_outside_hollows_sets_state_to_invalid_solution() { + // Arrange + CompassUse compassUse1 = new CompassUse(minesOfDivanCompassUse1); + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + Vec3 offset = new Vec3(0.0, 200.0, 0.0); + + compassUse1.playerPos = compassUse1.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); + for (ParticleSpawn particle : compassUse1.particles) { + particle.spawnLocation = particle.spawnLocation.add(offset); + } + + compassUse2.playerPos = compassUse2.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); + for (ParticleSpawn particle : compassUse2.particles) { + particle.spawnLocation = particle.spawnLocation.add(offset); + } + compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_solution_can_be_solved_after_state_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + checkSolution(solution); + + Solution solution2 = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution2); + } + + @Test + void second_solution_can_be_solved_after_state_is_failed() { + // Arrange + execInvalidParticlesInvalidSolution(); + Assertions.assertEquals(solver.getSolverState(), SolverState.FAILED_INVALID_SOLUTION); + + Solution solution2 = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution2); + } + + @Test + void distant_particles_are_ignored() { + // Arrange + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.get(2).spawnLocation.addVector(100.0, 100.0, 100.0); + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void possible_targets_includes_queen_and_excludes_king_when_kings_scent_is_present() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + solver.kingsScentPresent = () -> true; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void possible_targets_excludes_king_and_includes_queen_when_kings_scent_is_not_present() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + solver.kingsScentPresent = () -> false; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void possible_targets_excludes_odawa_and_includes_temple_when_key_in_inventory() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + solver.keyInInventory = () -> true; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertFalse(targets.contains(CompassTarget.ODAWA)); + Assertions.assertTrue(targets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void possible_targets_includes_odawa_and_excludes_temple_when_key_not_in_inventory() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + solver.keyInInventory = () -> false; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); + Assertions.assertFalse(targets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void possible_targets_only_contains_city_and_nucleus_when_in_remnants_without_sapphire_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(precursorCityCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.PRECURSOR_CITY)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_mines_and_nucleus_when_in_deposits_without_jade_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.MINES_OF_DIVAN)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_king_or_queen_and_nucleus_when_in_holdout_without_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING) || + targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_king_and_odawa_and_nucleus_when_in_jungle_without_crystal_or_key() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); + Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(3, targets.size()); + } + + @Test + void possible_targets_only_contains_bal_and_nucleus_when_in_magma_fields_without_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(magmaCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.BAL)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + private void CheckExcludedTargetsForCrystals( + CompassUse compassUseToExecute, + ArrayList excludedTargets, + EnumSet foundCrystals) { + // Arrange + EnumSet targets; + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUseToExecute)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + targets = solver.getPossibleTargets(); + boolean targetFound = false; + for (CompassTarget target : excludedTargets) { + if (targets.contains(target)) { + targetFound = true; + break; + } + } + Assertions.assertTrue(targetFound); + + resetSolverState(); + solver.foundCrystals = () -> foundCrystals; + checkSolution(solution); + targets = solver.getPossibleTargets(); + + // Assert + for (CompassTarget target : excludedTargets) { + Assertions.assertFalse(targets.contains(target)); + } + } + + @Test + void possible_targets_excludes_king_and_queen_when_amber_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Arrays.asList( + CompassTarget.GOBLIN_KING, + CompassTarget.GOBLIN_QUEEN + )); + CheckExcludedTargetsForCrystals(goblinHoldoutCompassUse1, excludedTargets, EnumSet.of(Crystal.AMBER)); + } + + @Test + void possible_targets_excludes_odawa_and_temple_when_amethyst_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Arrays.asList( + CompassTarget.ODAWA, + CompassTarget.JUNGLE_TEMPLE)); + CheckExcludedTargetsForCrystals(jungleCompassUse1, excludedTargets, EnumSet.of(Crystal.AMETHYST)); + } + + @Test + void possible_targets_excludes_mines_when_jade_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.MINES_OF_DIVAN)); + CheckExcludedTargetsForCrystals(minesOfDivanCompassUse1, excludedTargets, EnumSet.of(Crystal.JADE)); + } + + @Test + void possible_targets_excludes_city_when_sapphire_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.PRECURSOR_CITY)); + CheckExcludedTargetsForCrystals(precursorCityCompassUse1, excludedTargets, EnumSet.of(Crystal.SAPPHIRE)); + } + + @Test + void possible_targets_excludes_bal_when_topaz_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.BAL)); + CheckExcludedTargetsForCrystals(magmaCompassUse1, excludedTargets, EnumSet.of(Crystal.TOPAZ)); + } + + @Test + void solver_resets_when_possible_targets_change_based_on_found_crystals() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; + solver.foundCrystals = () -> EnumSet.of(Crystal.JADE); + HandleCompassResult handleCompassResult = solver.handleCompassUse(minesOfDivanCompassUse2.playerPos); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + + @Test + void solver_resets_when_possible_targets_change_based_on_location() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; + BlockPos newLocation = minesOfDivanCompassUse2.playerPos.add(-400, 0 ,0); + HandleCompassResult handleCompassResult = solver.handleCompassUse(newLocation); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + + @Test + void mines_of_divan_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void jungle_temple_solution_with_key_in_inventory_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), + jungleSolutionTempleDoor + ); + solver.keyInInventory = () -> true; + + // Act & Assert + checkSolution(solution); + } + + @Test + void jungle_temple_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), + jungleSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void precursor_city_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void goblin_king_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(goblinHoldoutCompassUse1, goblinHoldoutCompassUse2)), + goblinHoldoutKingSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void bal_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(magmaCompassUse1, magmaCompassUse2)), + magmaSolution + ); + + // Act & Assert + checkSolution(solution); + } + + EnumSet GetSolutionTargetsHelper( + EnumSet possibleTargets, + Vec3Comparable solutionCoords, + int expectedSolutionCount) { + EnumSet solutionTargets = + CrystalWishingCompassSolver.getSolutionTargets(possibleTargets, solutionCoords); + Assertions.assertEquals(expectedSolutionCount, solutionTargets.size()); + return solutionTargets; + } + + @Test + void solutionPossibleTargets_removes_nucleus_when_coords_not_in_nucleus() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + new Vec3Comparable(minesOfDivanSolution), + 2); + + //Assert + Assertions.assertFalse(solutionTargets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + } + + @Test + void solutionPossibleTargets_includes_adjacent_zones() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + kingMinesOrNucleusCoordsInRemnants, + 2); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); + Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); + } + + @Test + void solutionPossibleTargets_skips_y_filtering_when_single_possible_target() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.of(CompassTarget.GOBLIN_QUEEN), + new Vec3Comparable(goblinHoldoutKingSolution), // Coords not valid for queen + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); + } + + @Test + void solutionPossibleTargets_still_filters_non_adjacent_when_single_possible_target() { + // Arrange, Act and Assert + GetSolutionTargetsHelper( + EnumSet.of(CompassTarget.ODAWA), + kingMinesOrNucleusCoordsInRemnants, + 0); + } + + @Test + void solutionPossibleTargets_includes_king_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(goblinHoldoutKingSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void solutionPossibleTargets_includes_odawa_based_on_y_coordinate() { + // Arrange & Act + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(odawaSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); + } + + @Test + void solutionPossibleTargets_includes_mines_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(minesOfDivanSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); + } + + @Test + void solutionPossibleTargets_includes_temple_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.BAL); + possibleTargets.remove(CompassTarget.ODAWA); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(jungleSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void solutionPossibleTargets_includes_queen_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(goblinHoldoutQueenSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); + } + + @Test + void solutionPossibleTargets_includes_city_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(precursorCitySolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); + } + + @Test + void solutionPossibleTargets_includes_bal_based_on_y_coordinate() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + new Vec3Comparable(magmaSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); + } + + // Represents a particle spawn, including: + // - Milliseconds to increment the "system time" prior to spawn. + // - The particle spawn location. + static class ParticleSpawn { + long timeIncrementMillis; + Vec3Comparable spawnLocation; + + ParticleSpawn(Vec3Comparable spawnLocation, long timeIncrementMillis) { + this.timeIncrementMillis = timeIncrementMillis; + this.spawnLocation = spawnLocation; + } + + ParticleSpawn(ParticleSpawn source) { + timeIncrementMillis = source.timeIncrementMillis; + spawnLocation = new Vec3Comparable(source.spawnLocation); + } + } + + // Represents a use of the wishing compass, including: + // - Milliseconds to increment the "system time" prior to use. + // - The player's position when the compass is used. + // - The resulting set of particles + // - The expected state of the wishing compass solver after this compass is used + static class CompassUse { + long timeIncrementMillis; + BlockPos playerPos; + ArrayList particles; + HandleCompassResult expectedHandleCompassUseResult; + SolverState expectedSolverState; + + CompassUse(long timeIncrementMillis, + BlockPos playerPos, + ArrayList particles, + HandleCompassResult expectedHandleCompassUseResult, + SolverState expectedState) { + this.timeIncrementMillis = timeIncrementMillis; + this.playerPos = playerPos; + this.particles = particles != null ? particles : new ArrayList<>(); + this.expectedHandleCompassUseResult = expectedHandleCompassUseResult; + this.expectedSolverState = expectedState; + } + + CompassUse(CompassUse source) { + this.timeIncrementMillis = source.timeIncrementMillis; + this.playerPos = new BlockPos(source.playerPos); + this.particles = new ArrayList<>(source.particles); + this.expectedHandleCompassUseResult = source.expectedHandleCompassUseResult; + this.expectedSolverState = source.expectedSolverState; + } + } + + static class Solution { + ArrayList compassUses; + Vec3i expectedSolutionCoords; + + Solution(ArrayList compassUses, Vec3i expectedSolutionCoords) { + this.compassUses = compassUses; + this.expectedSolutionCoords = new Vec3i(expectedSolutionCoords.getX(), expectedSolutionCoords.getY(), expectedSolutionCoords.getZ()); + } + } + + private static void neuDebugLog(String message) { + System.out.println(message); + } +} -- cgit From 5e7a8a02fe836c1e635faf067fbe8913549bc0e0 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Sun, 27 Mar 2022 12:13:08 -0500 Subject: Add NBT Data to Profile Viewer Tabs and XP Bars (#94) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed what hypxiel broke in dungeons * Added Longswords to Tools Tab (Itemlist) * Set max cata level to 70 * ups * why is it now E * YEP the cap is 99 not 70 * long cata xp BatChest + remove crash check because hypixel profile is null and i havent fixed that yet * Added checks for chat messages for dungeon win overlay - i think ive got them all but 4Shrug * Added an option to alert you if you put something for too much onto ah (default 50%) + Lowest bin alert triggers if lowest bin isnt found * IMPORTANT * fix dungeon page in /pv * show minions from coop in /pv * (BREAKING CHANGE) remove whitespace in changelog * fix crash with minion check * initial draft * tooltip * important changes * progress related things progress bar for community goals total collected points and personal goals display * only show bingo tab on Bingo profiles * make goals display gold when completed * Added MM7 button to dungeon preset * wart go not stonks * fix percents and added stack size * use code nopo in fortnite shop — Today at 17:29 The capitalisation * config option for always showing bingo page * 🙂 * movble pv tabs * 2.1.md 🙂 * oops * der Kabel * import * Added powder amount to level up perk * Made it only show if the perk isnt maxed / level 0 * fix /pv crash when pet is not in repo * 2.1.md 🙂 * web editor my beloved * Add NBT Data to Profile Viewer Tabs and XP Bars Add NBT Data Support for Resources in Tabs Add NBT Data Support for Resources in XP Bars Optimize renderTabs function Optimize mouseClicked Function Optimize ProfileViewerPage Enum * Update Style Co-authored-by: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> * Update GuiProfileViewer Rebased on pvbingo Updated formatting with IntelliJ reformatting tool (hopefully that matches now, let me know if you want me to try again but I think I did it right) * dungeons and pv bingo tab (#93) * add custom skull loading back (#96) * Refactor Hollows solvers, add tests, add Vec3Comparable, fix bugs (#95) * Rebase on master * Fix conflicts and rebase on master Add changes to change log * Oops Co-authored-by: nopo Co-authored-by: jani270 Co-authored-by: Lulonaut Co-authored-by: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Co-authored-by: Lulonaut <67191924+Lulonaut@users.noreply.github.com> Co-authored-by: CraftyOldMiner <85420839+CraftyOldMiner@users.noreply.github.com> --- Update Notes/2.1.md | 3 + build.gradle.kts | 5 - .../notenoughupdates/NotEnoughUpdates.java | 148 ++- .../notenoughupdates/commands/dev/DiagCommand.java | 27 +- .../annotations/ConfigEditorDraggableList.java | 2 +- .../config/gui/GuiOptionEditorDraggableList.java | 16 +- .../core/config/struct/ConfigProcessor.java | 2 +- .../notenoughupdates/core/util/Vec3Comparable.java | 129 --- .../miscfeatures/AuctionBINWarning.java | 30 +- .../miscfeatures/CrystalMetalDetectorSolver.java | 450 +++----- .../miscfeatures/CrystalWishingCompassSolver.java | 942 +++------------ .../options/seperateSections/Mining.java | 54 +- .../options/seperateSections/Misc.java | 1 + .../options/seperateSections/ProfileViewer.java | 2 +- .../notenoughupdates/profileviewer/BingoPage.java | 16 +- .../profileviewer/GuiProfileViewer.java | 82 +- .../notenoughupdates/util/NEUDebugLogger.java | 10 +- .../moulberry/notenoughupdates/util/SBInfo.java | 14 +- .../core/util/Vec3ComparableTest.java | 193 ---- .../CrystalMetalDetectorSolverTest.java | 204 ---- .../CrystalWishingCompassSolverTest.java | 1206 -------------------- src/test/resources/log4j2-test.xml | 16 - 22 files changed, 525 insertions(+), 3027 deletions(-) delete mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java delete mode 100644 src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java delete mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java delete mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java delete mode 100644 src/test/resources/log4j2-test.xml (limited to 'src/test/java') diff --git a/Update Notes/2.1.md b/Update Notes/2.1.md index 1344905e..9b67fb75 100644 --- a/Update Notes/2.1.md +++ b/Update Notes/2.1.md @@ -65,6 +65,9 @@ - Made the order of the tabs in /pv changeable - Lulonaut - Crystal Hollows crystal states are now updated when the Heart of the Mountain menu is opened - CraftyOldMiner - Added /neudiag command to enable/disable debug logging and dump diagnostic data - CraftyOldMiner +- Added NBT data to Profile Viewer HOTM tree icons - whalker +- Added NBT data to Profile Viewer Tab Icons - whalker +- Added NBT data to Profile Viewer XP Bar Icons - whalker ### **Bug Fixes:** - Fix wiki pages freezing the entire game - nea89 - Made titanium overlay and waypoints work with dwarven overlay off diff --git a/build.gradle.kts b/build.gradle.kts index e134387e..e47b0f67 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,7 +67,6 @@ dependencies { annotationProcessor("org.spongepowered:mixin:0.7.11-SNAPSHOT") implementation("com.fasterxml.jackson.core:jackson-core:2.13.1") implementation("info.bliki.wiki:bliki-core:3.1.0") - testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") } @@ -77,10 +76,6 @@ tasks.withType(JavaCompile::class) { options.encoding = "UTF-8" } -tasks.named("test") { - useJUnitPlatform() -} - tasks.withType(Jar::class) { archiveBaseName.set("NotEnoughUpdates") manifest.attributes.run { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 951e7335..0ed68e06 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -1,5 +1,17 @@ package io.github.moulberry.notenoughupdates; +import java.awt.Color; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Set; + import com.google.common.collect.Sets; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -12,9 +24,22 @@ import io.github.moulberry.notenoughupdates.listener.ChatListener; import io.github.moulberry.notenoughupdates.listener.ItemTooltipListener; import io.github.moulberry.notenoughupdates.listener.NEUEventListener; import io.github.moulberry.notenoughupdates.listener.RenderListener; -import io.github.moulberry.notenoughupdates.miscfeatures.*; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalOverlay; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver; +import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; +import io.github.moulberry.notenoughupdates.miscfeatures.DwarvenMinesWaypoints; +import io.github.moulberry.notenoughupdates.miscfeatures.EnchantingSolvers; +import io.github.moulberry.notenoughupdates.miscfeatures.FairySouls; +import io.github.moulberry.notenoughupdates.miscfeatures.FishingHelper; +import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns; +import io.github.moulberry.notenoughupdates.miscfeatures.ItemCustomizeManager; +import io.github.moulberry.notenoughupdates.miscfeatures.MiningStuff; +import io.github.moulberry.notenoughupdates.miscfeatures.NullzeeSphere; +import io.github.moulberry.notenoughupdates.miscfeatures.PetInfoOverlay; +import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking; +import io.github.moulberry.notenoughupdates.miscfeatures.StorageManager; +import io.github.moulberry.notenoughupdates.miscfeatures.SunTzu; import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.CustomBiomes; -import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.CustomBlockSounds; import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.DwarvenMinesTextures; import io.github.moulberry.notenoughupdates.miscgui.CalendarOverlay; import io.github.moulberry.notenoughupdates.miscgui.InventoryStorageSelector; @@ -28,14 +53,17 @@ import io.github.moulberry.notenoughupdates.util.Utils; import io.github.moulberry.notenoughupdates.util.XPInformation; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.settings.KeyBinding; import net.minecraft.event.ClickEvent; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.biome.*; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.BiomeGenHell; +import net.minecraft.world.biome.BiomeGenJungle; +import net.minecraft.world.biome.BiomeGenMesa; +import net.minecraft.world.biome.BiomeGenSnow; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; @@ -44,12 +72,6 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; -import java.awt.*; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Set; - @Mod(modid = NotEnoughUpdates.MODID, version = NotEnoughUpdates.VERSION, clientSideOnly = true) public class NotEnoughUpdates { public static final String MODID = "notenoughupdates"; @@ -57,6 +79,60 @@ public class NotEnoughUpdates { public static final String PRE_VERSION = "0.0"; public static final int VERSION_ID = 20100; public static final int PRE_VERSION_ID = 0; + + public static NotEnoughUpdates INSTANCE = null; + + public NEUManager manager; + public NEUOverlay overlay; + public NEUConfig config; + + private File configFile; + + public File getConfigFile() { + return this.configFile; + } + + public void newConfigFile() { + this.configFile = new File(NotEnoughUpdates.INSTANCE.getNeuDir(), "configNew.json"); + } + + private static final long CHAT_MSG_COOLDOWN = 200; + private long lastChatMessage = 0; + private long secondLastChatMessage = 0; + private String currChatMessage = null; + + //Stolen from Biscut and used for detecting whether in skyblock + private static final Set SKYBLOCK_IN_ALL_LANGUAGES = + Sets.newHashSet("SKYBLOCK", "\u7A7A\u5C9B\u751F\u5B58", "\u7A7A\u5CF6\u751F\u5B58"); + + public GuiScreen openGui = null; + public long lastOpenedGui = 0; + + public Commands commands; + + public static HashMap petRarityToColourMap = new HashMap() {{ + put("UNKNOWN", EnumChatFormatting.RED.toString()); + put("COMMON", EnumChatFormatting.WHITE.toString()); + put("UNCOMMON", EnumChatFormatting.GREEN.toString()); + put("RARE", EnumChatFormatting.BLUE.toString()); + put("EPIC", EnumChatFormatting.DARK_PURPLE.toString()); + put("LEGENDARY", EnumChatFormatting.GOLD.toString()); + put("MYTHIC", EnumChatFormatting.LIGHT_PURPLE.toString()); + }}; + + public static ProfileViewer profileViewer; + + public boolean packDevEnabled = false; + + private final Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); + private File neuDir; + + public File getNeuDir() { + return this.neuDir; + } + + public Color[][] colourMap = null; + /** * Registers the biomes for the crystal hollows here so optifine knows they exists */ @@ -90,48 +166,6 @@ public class NotEnoughUpdates { .setBiomeName("NeuCrystalHollowsCrystalNucleus") .setFillerBlockMetadata(5470985) .setTemperatureRainfall(0.95F, 0.9F); - private static final long CHAT_MSG_COOLDOWN = 200; - //Stolen from Biscut and used for detecting whether in skyblock - private static final Set SKYBLOCK_IN_ALL_LANGUAGES = - Sets.newHashSet("SKYBLOCK", "\u7A7A\u5C9B\u751F\u5B58", "\u7A7A\u5CF6\u751F\u5B58"); - public static NotEnoughUpdates INSTANCE = null; - public static HashMap petRarityToColourMap = new HashMap() {{ - put("UNKNOWN", EnumChatFormatting.RED.toString()); - put("COMMON", EnumChatFormatting.WHITE.toString()); - put("UNCOMMON", EnumChatFormatting.GREEN.toString()); - put("RARE", EnumChatFormatting.BLUE.toString()); - put("EPIC", EnumChatFormatting.DARK_PURPLE.toString()); - put("LEGENDARY", EnumChatFormatting.GOLD.toString()); - put("MYTHIC", EnumChatFormatting.LIGHT_PURPLE.toString()); - }}; - public static ProfileViewer profileViewer; - private final Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); - public NEUManager manager; - public NEUOverlay overlay; - public NEUConfig config; - public GuiScreen openGui = null; - public long lastOpenedGui = 0; - public Commands commands; - public boolean packDevEnabled = false; - public Color[][] colourMap = null; - private File configFile; - private long lastChatMessage = 0; - private long secondLastChatMessage = 0; - private String currChatMessage = null; - private File neuDir; - private boolean hasSkyblockScoreboard; - - public File getConfigFile() { - return this.configFile; - } - - public void newConfigFile() { - this.configFile = new File(NotEnoughUpdates.INSTANCE.getNeuDir(), "configNew.json"); - } - - public File getNeuDir() { - return this.neuDir; - } /** * Instantiates NEUIo, NEUManager and NEUOverlay instances. Registers keybinds and adds a shutdown hook to clear tmp folder. @@ -215,14 +249,6 @@ public class NotEnoughUpdates { MinecraftForge.EVENT_BUS.register(new CrystalOverlay()); MinecraftForge.EVENT_BUS.register(new ItemCooldowns()); - if (Minecraft.getMinecraft().getResourceManager() instanceof IReloadableResourceManager) { - IReloadableResourceManager manager = (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager(); - manager.registerReloadListener(CustomSkulls.getInstance()); - manager.registerReloadListener(NPCRetexturing.getInstance()); - manager.registerReloadListener(new ItemCustomizeManager.ReloadListener()); - manager.registerReloadListener(new CustomBlockSounds.ReloaderListener()); - } - this.commands = new Commands(); BackgroundBlur.registerListener(); @@ -384,6 +410,8 @@ public class NotEnoughUpdates { return hasSkyblockScoreboard(); } + private boolean hasSkyblockScoreboard; + public boolean hasSkyblockScoreboard() { return hasSkyblockScoreboard; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java index dab99698..88264538 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java @@ -17,10 +17,8 @@ public class DiagCommand extends ClientCommandBase { private static final String USAGE_TEXT = EnumChatFormatting.WHITE + "Usage: /neudiag \n\n" + - "/neudiag metal Metal Detector Solver diagnostics\n" + - " Show current solution diags\n" + - " center= Disable / enable using center\n" + - "/neudiag wishing Wishing Compass Solver diagnostics\n" + + "/neudiag metal Metal Detector Solver diagnostics\n" + + "/neudiag wishing Wishing Compass Solver diagnostics\n" + "/neudiag debug\n" + " Show current flags\n" + " Enable/disable flag\n"; @@ -39,26 +37,7 @@ public class DiagCommand extends ClientCommandBase { String command = args[0].toLowerCase(); switch (command) { case "metal": - if (args.length == 1) { - CrystalMetalDetectorSolver.logDiagnosticData(true); - return; - } - - String subCommand = args[1].toLowerCase(); - if (subCommand.equals("center=off")) { - CrystalMetalDetectorSolver.setDebugDoNotUseCenter(true); - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "Center coordinates-based solutions disabled")); - } - else if (subCommand.equals("center=on")) { - CrystalMetalDetectorSolver.setDebugDoNotUseCenter(false); - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "Center coordinates-based solutions enabled")); - } else { - showUsage(sender); - return; - } - + CrystalMetalDetectorSolver.logDiagnosticData(true); break; case "wishing": CrystalWishingCompassSolver.getInstance().logDiagnosticData(true); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java index 5063d543..61e923f5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java @@ -9,5 +9,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) public @interface ConfigEditorDraggableList { String[] exampleText(); - boolean allowRemovingElements() default true; + boolean allowDeleting() default true; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java index df373dbf..4dbde24b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java @@ -24,7 +24,7 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { private static final ResourceLocation DELETE = new ResourceLocation("notenoughupdates:core/delete.png"); private final String[] exampleText; - private final boolean allowRemovingElements; + private final boolean enableDeleting; private final List activeText; private int currentDragging = -1; private int dragStartIndex = -1; @@ -39,11 +39,11 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { public GuiOptionEditorDraggableList( ConfigProcessor.ProcessedOption option, String[] exampleText, - boolean allowRemovingElements + boolean disableDeleting ) { super(option); - this.allowRemovingElements = allowRemovingElements; + this.enableDeleting = disableDeleting; this.exampleText = exampleText; this.activeText = (List) option.get(); } @@ -84,7 +84,7 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { GlStateManager.color(1, greenBlue, greenBlue, 1); } - if (allowRemovingElements) { + if (enableDeleting) { Minecraft.getMinecraft().getTextureManager().bindTexture(DELETE); Utils.drawTexturedRect(x + width / 6 + 27, y + 45 - 7 - 13, 11, 14, GL11.GL_NEAREST); } @@ -215,7 +215,7 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { dragStartIndex >= 0 && Mouse.getEventButton() == 0 && mouseX >= x + width / 6 + 27 - 3 && mouseX <= x + width / 6 + 27 + 11 + 3 && mouseY >= y + 45 - 7 - 13 - 3 && mouseY <= y + 45 - 7 - 13 + 14 + 3) { - if (allowRemovingElements) { + if (enableDeleting) { activeText.remove(dragStartIndex); } currentDragging = -1; @@ -226,13 +226,13 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { if (!Mouse.isButtonDown(0) || dropdownOpen) { currentDragging = -1; dragStartIndex = -1; - if (trashHoverTime > 0 && allowRemovingElements) trashHoverTime = -System.currentTimeMillis(); + if (trashHoverTime > 0 && enableDeleting) trashHoverTime = -System.currentTimeMillis(); } else if (currentDragging >= 0 && mouseX >= x + width / 6 + 27 - 3 && mouseX <= x + width / 6 + 27 + 11 + 3 && mouseY >= y + 45 - 7 - 13 - 3 && mouseY <= y + 45 - 7 - 13 + 14 + 3) { - if (trashHoverTime < 0 && allowRemovingElements) trashHoverTime = System.currentTimeMillis(); + if (trashHoverTime < 0 && enableDeleting) trashHoverTime = System.currentTimeMillis(); } else { - if (trashHoverTime > 0 && allowRemovingElements) trashHoverTime = -System.currentTimeMillis(); + if (trashHoverTime > 0 && enableDeleting) trashHoverTime = -System.currentTimeMillis(); } if (Mouse.getEventButtonState()) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java index 3eb8a2d1..0d06980a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java @@ -147,7 +147,7 @@ public class ConfigProcessor { if (optionField.isAnnotationPresent(ConfigEditorDraggableList.class)) { ConfigEditorDraggableList configEditorAnnotation = optionField.getAnnotation(ConfigEditorDraggableList.class); - editor = new GuiOptionEditorDraggableList(option, configEditorAnnotation.exampleText(), configEditorAnnotation.allowRemovingElements()); + editor = new GuiOptionEditorDraggableList(option, configEditorAnnotation.exampleText(), configEditorAnnotation.allowDeleting()); } } if (optionType.isAssignableFrom(String.class)) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java deleted file mode 100644 index cd144c21..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java +++ /dev/null @@ -1,129 +0,0 @@ -package io.github.moulberry.notenoughupdates.core.util; - -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; -import net.minecraft.util.Vec3i; - -public class Vec3Comparable extends Vec3 implements Comparable { - public static final Vec3Comparable NULL_VECTOR = new Vec3Comparable(0.0, 0.0, 0.0); - - public Vec3Comparable(double x, double y, double z) { - super(x, y, z); - } - - public Vec3Comparable(Vec3i sourceVec) { - super(sourceVec); - } - - public Vec3Comparable(Vec3 source) { - super(source.xCoord, source.yCoord, source.zCoord); - } - - public Vec3Comparable(BlockPos source) { - - super(source.getX(), source.getY(), source.getZ()); - } - - public Vec3Comparable(Vec3Comparable source) { - super(source.xCoord, source.yCoord, source.zCoord); - } - - @Override - public Vec3Comparable subtractReverse(Vec3 vec) { - return new Vec3Comparable(super.subtractReverse(vec)); - } - - @Override - public Vec3Comparable normalize() { - return new Vec3Comparable(super.normalize()); - } - - @Override - public Vec3Comparable crossProduct(Vec3 vec) { - return new Vec3Comparable(super.crossProduct(vec)); - } - - @Override - public Vec3Comparable subtract(Vec3 vec) { - return new Vec3Comparable(super.subtract(vec)); - } - - @Override - public Vec3Comparable subtract(double x, double y, double z) { - return new Vec3Comparable(super.subtract(x, y, z)); - } - - @Override - public Vec3Comparable add(Vec3 other) { - return new Vec3Comparable(super.add(other)); - } - - @Override - public Vec3Comparable addVector(double x, double y, double z) { - return new Vec3Comparable(super.addVector(x, y, z)); - } - - @Override - public Vec3Comparable getIntermediateWithXValue(Vec3 vec, double x) { - return new Vec3Comparable(super.getIntermediateWithXValue(vec, x)); - } - - @Override - public Vec3Comparable getIntermediateWithYValue(Vec3 vec, double y) { - return new Vec3Comparable(super.getIntermediateWithYValue(vec, y)); - } - - @Override - public Vec3Comparable getIntermediateWithZValue(Vec3 vec, double z) { - return new Vec3Comparable(super.getIntermediateWithZValue(vec, z)); - } - - @Override - public Vec3Comparable rotatePitch(float pitch) { - return new Vec3Comparable(super.rotatePitch(pitch)); - } - - @Override - public Vec3Comparable rotateYaw(float yaw) { - return new Vec3Comparable(super.rotateYaw(yaw)); - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } else if (!(other instanceof Vec3Comparable)) { - return false; - } else { - Vec3Comparable vec3c = (Vec3Comparable) other; - return this.xCoord == vec3c.xCoord && this.yCoord == vec3c.yCoord && this.zCoord == vec3c.zCoord; - } - } - - @Override - public int hashCode() { - long bits = 1L; - bits = 31L * bits + doubleToLongBits(xCoord); - bits = 31L * bits + doubleToLongBits(yCoord); - bits = 31L * bits + doubleToLongBits(zCoord); - return (int) (bits ^ (bits >> 32)); - } - - public int compareTo(Vec3Comparable other) { - return this.yCoord == other.yCoord ? - (this.zCoord == other.zCoord ? - (int)(this.xCoord - other.xCoord) - : (int)(this.zCoord - other.zCoord)) - : (int)(this.yCoord - other.yCoord); - } - - public boolean signumEquals(Vec3 other) { - return Math.signum(xCoord) == Math.signum(other.xCoord) && - Math.signum(yCoord) == Math.signum(other.yCoord) && - Math.signum(zCoord) == Math.signum(other.zCoord); - } - - private static long doubleToLongBits(double d) { - return d == 0.0 ? 0L : Double.doubleToLongBits(d); - } -} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java index c7bcc0e1..a787ca99 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java @@ -37,7 +37,9 @@ public class AuctionBINWarning extends GuiElement { private String sellingName; private int sellingPrice; private int lowestPrice; + private int buyPercentage; private int sellStackAmount; + private boolean isALoss = true; private boolean shouldPerformCheck() { if (!NotEnoughUpdates.INSTANCE.config.ahTweaks.enableBINWarning || @@ -110,14 +112,13 @@ public class AuctionBINWarning extends GuiElement { float undercutFactor = 1 - NotEnoughUpdates.INSTANCE.config.ahTweaks.warningThreshold / 100; if (undercutFactor < 0) undercutFactor = 0; if (undercutFactor > 1) undercutFactor = 1; - float overcutFactor = 1 + NotEnoughUpdates.INSTANCE.config.ahTweaks.overcutWarningThreshold / 100; + float overcutFactor = 1 - NotEnoughUpdates.INSTANCE.config.ahTweaks.overcutWarningThreshold / 100; if (overcutFactor < 0) overcutFactor = 0; + if (overcutFactor > 1) overcutFactor = 1; - if ( - (sellingPrice > 0 && lowestPrice > 0 && - ((sellingPrice > sellStackAmount * lowestPrice * overcutFactor) || - sellingPrice < sellStackAmount * lowestPrice * undercutFactor)) - || lowestPrice == -1) { + if ((sellingPrice > 0 && lowestPrice > 0 && sellingPrice < sellStackAmount * lowestPrice * undercutFactor) + || (sellingPrice > 0 && lowestPrice > 0 && sellingPrice > sellStackAmount * lowestPrice * (overcutFactor + 1)) + || lowestPrice == -1) { showWarning = true; return true; } else { @@ -180,9 +181,7 @@ public class AuctionBINWarning extends GuiElement { width / 2, height / 2 - 45 + 25, false, 170, 0xffffffff ); TextRenderUtils.drawStringCenteredScaledMaxWidth( - (lowestPrice > 0 - ? "has a lowest BIN of \u00a76" + lowestPriceStr + "\u00a7r coins" - : "\u00a7cWarning: No lowest BIN found!"), + (lowestPrice > 0 ? "has a lowest BIN of \u00a76" + lowestPriceStr + "\u00a7r coins" : "\u00a7cWarning: No lowest BIN found!"), Minecraft.getMinecraft().fontRendererObj, width / 2, height / 2 - 45 + 34, @@ -191,16 +190,16 @@ public class AuctionBINWarning extends GuiElement { 0xffa0a0a0 ); - boolean isALoss = false; - int buyPercentage = 0; if (sellingPrice > lowestPrice * sellStackAmount) { - buyPercentage = sellingPrice * 100 / (lowestPrice * sellStackAmount) - 100; + buyPercentage = sellingPrice * 100 / (lowestPrice * sellStackAmount); isALoss = false; } else if (sellingPrice < lowestPrice * sellStackAmount) { - buyPercentage = 100 - sellingPrice * 100 / (lowestPrice * sellStackAmount); + buyPercentage = 100 - sellingPrice * 100 / (lowestPrice * sellStackAmount); + if (buyPercentage <= 0) buyPercentage = 1; isALoss = true; } + TextRenderUtils.drawStringCenteredScaledMaxWidth( "Continue selling it for", Minecraft.getMinecraft().fontRendererObj, @@ -211,10 +210,7 @@ public class AuctionBINWarning extends GuiElement { 0xffa0a0a0 ); TextRenderUtils.drawStringCenteredScaledMaxWidth( - "\u00a76" + sellingPriceStr + "\u00a7r coins?" + - ((lowestPrice > 0 && buyPercentage > 0) - ? "(\u00a7" + (isALoss ? "c-" : "a+") + buyPercentage + "%\u00a7r)" - : ""), + "\u00a76" + sellingPriceStr + "\u00a7r coins?" + (lowestPrice > 0 ? "(\u00a7" + (isALoss ? "c-" : "a+") + buyPercentage + "%\u00a7r)" : ""), Minecraft.getMinecraft().fontRendererObj, width / 2, height / 2 - 45 + 59, diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java index f43ebda2..27c334ad 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java @@ -1,7 +1,6 @@ package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; import io.github.moulberry.notenoughupdates.options.customtypes.NEUDebugFlag; import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; @@ -12,6 +11,7 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import net.minecraft.util.Vec3; import net.minecraft.util.Vec3i; import java.util.Arrays; @@ -22,35 +22,25 @@ import java.util.List; import java.util.stream.Collectors; public class CrystalMetalDetectorSolver { - enum SolutionState { - NOT_STARTED, - MULTIPLE, - MULTIPLE_KNOWN, - FOUND, - FOUND_KNOWN, - FAILED, - INVALID, - } - private static final Minecraft mc = Minecraft.getMinecraft(); - private static Vec3Comparable prevPlayerPos; - private static double prevDistToTreasure; + private static BlockPos prevPlayerPos; + private static double prevDistToTreasure = 0; private static HashSet possibleBlocks = new HashSet<>(); - private static final HashMap evaluatedPlayerPositions = new HashMap<>(); - private static boolean chestRecentlyFound; - private static long chestLastFoundMillis; + private static final HashMap evaluatedPlayerPositions = new HashMap<>(); + private static BlockPos blockPosIfLastSolutionInvalid; + private static Boolean chestRecentlyFound = false; + private static long chestLastFoundMillis = 0; private static final HashSet openedChestPositions = new HashSet<>(); // Keeper and Mines of Divan center location info private static Vec3i minesCenter; - private static boolean debugDoNotUseCenter = false; - private static boolean visitKeeperMessagePrinted; - private static final String KEEPER_OF_STRING = "Keeper of "; - private static final String DIAMOND_STRING = "diamond"; - private static final String LAPIS_STRING = "lapis"; - private static final String EMERALD_STRING = "emerald"; - private static final String GOLD_STRING = "gold"; + private static boolean visitKeeperMessagePrinted = false; + private static String KEEPER_OF_STRING = "Keeper of "; + private static String DIAMOND_STRING = "diamond"; + private static String LAPIS_STRING = "lapis"; + private static String EMERALD_STRING = "emerald"; + private static String GOLD_STRING = "gold"; private static final HashMap keeperOffsets = new HashMap() {{ put(DIAMOND_STRING, new Vec3i(33,0,3)); put(LAPIS_STRING, new Vec3i(-33,0,-3)); @@ -104,14 +94,6 @@ public class CrystalMetalDetectorSolver { -9896946827286L // x=-37, y=-21, z=-22 )); - static Predicate treasureAllowedPredicate = CrystalMetalDetectorSolver::treasureAllowed; - static SolutionState currentState = SolutionState.NOT_STARTED; - static SolutionState previousState = SolutionState.NOT_STARTED; - - public interface Predicate { - boolean check(BlockPos blockPos); - } - public static void process(IChatComponent message) { if (SBInfo.getInstance().getLocation() == null || !NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled || @@ -120,7 +102,7 @@ public class CrystalMetalDetectorSolver { return; } - boolean centerNewlyDiscovered = locateMinesCenterIfNeeded(); + locateMinesCenterIfNeeded(); double distToTreasure = Double.parseDouble(message .getUnformattedText() @@ -140,64 +122,20 @@ public class CrystalMetalDetectorSolver { chestRecentlyFound = false; } - SolutionState originalState = currentState; - int originalCount = possibleBlocks.size(); - Vec3Comparable adjustedPlayerPos = getPlayerPosAdjustedForEyeHeight(); - findPossibleSolutions(distToTreasure, adjustedPlayerPos, centerNewlyDiscovered); - if (currentState != originalState || originalCount != possibleBlocks.size()) { - switch (currentState) { - case FOUND_KNOWN: - NEUDebugLogger.log(NEUDebugFlag.METAL, "Known location identified."); - // falls through - case FOUND: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] Found solution.")); - if (NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL) && - (previousState == SolutionState.INVALID || previousState == SolutionState.FAILED)) { - NEUDebugLogger.log(NEUDebugFlag.METAL, - EnumChatFormatting.AQUA + "Solution coordinates: " + - EnumChatFormatting.WHITE + possibleBlocks.iterator().next().toString()); - } - break; - case INVALID: - mc.thePlayer.addChatMessage(new ChatComponentText( - EnumChatFormatting.RED + "[NEU] Previous solution is invalid.")); - logDiagnosticData(false); - resetSolution(false); - break; - case FAILED: - mc.thePlayer.addChatMessage(new ChatComponentText( - EnumChatFormatting.RED + "[NEU] Failed to find a solution.")); - logDiagnosticData(false); - resetSolution(false); - break; - case MULTIPLE_KNOWN: - NEUDebugLogger.log(NEUDebugFlag.METAL, "Multiple known locations identified:"); - // falls through - case MULTIPLE: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Need another position to find solution. Possible blocks: " + possibleBlocks.size())); - break; - default: - throw new IllegalStateException("Metal detector is in invalid state"); - } - } - } - - static void findPossibleSolutions(double distToTreasure, Vec3Comparable playerPos, boolean centerNewlyDiscovered) { - if (prevDistToTreasure == distToTreasure && prevPlayerPos.equals(playerPos) && - !evaluatedPlayerPositions.containsKey(playerPos)) { - evaluatedPlayerPositions.put(playerPos, distToTreasure); + if (prevDistToTreasure == distToTreasure && + prevPlayerPos.equals(mc.thePlayer.getPosition()) && + !evaluatedPlayerPositions.keySet().contains(mc.thePlayer.getPosition())) { if (possibleBlocks.size() == 0) { + evaluatedPlayerPositions.put(mc.thePlayer.getPosition(), distToTreasure); for (int zOffset = (int) Math.floor(-distToTreasure); zOffset <= Math.ceil(distToTreasure); zOffset++) { for (int y = 65; y <= 75; y++) { double calculatedDist = 0; int xOffset = 0; while (calculatedDist < distToTreasure) { - BlockPos pos = new BlockPos(Math.floor(playerPos.xCoord) + xOffset, - y, Math.floor(playerPos.zCoord) + zOffset - ); - calculatedDist = playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)); - if (round(calculatedDist, 1) == distToTreasure && treasureAllowedPredicate.check(pos)) { + BlockPos pos = new BlockPos(Math.floor(mc.thePlayer.posX) + xOffset, + y, Math.floor(mc.thePlayer.posZ) + zOffset); + calculatedDist = getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)); + if (round(calculatedDist, 1) == distToTreasure && treasureAllowed(pos)) { possibleBlocks.add(pos); } xOffset++; @@ -205,11 +143,10 @@ public class CrystalMetalDetectorSolver { xOffset = 0; calculatedDist = 0; while (calculatedDist < distToTreasure) { - BlockPos pos = new BlockPos(Math.floor(playerPos.xCoord) - xOffset, - y, Math.floor(playerPos.zCoord) + zOffset - ); - calculatedDist = playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)); - if (round(calculatedDist, 1) == distToTreasure && treasureAllowedPredicate.check(pos)) { + BlockPos pos = new BlockPos(Math.floor(mc.thePlayer.posX) - xOffset, + y, Math.floor(mc.thePlayer.posZ) + zOffset); + calculatedDist = getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)); + if (round(calculatedDist, 1) == distToTreasure && treasureAllowed(pos)) { possibleBlocks.add(pos); } xOffset++; @@ -217,33 +154,48 @@ public class CrystalMetalDetectorSolver { } } - updateSolutionState(); + checkAndDisplaySolutionState(); } else if (possibleBlocks.size() != 1) { + evaluatedPlayerPositions.put(mc.thePlayer.getPosition().getImmutable(), distToTreasure); HashSet temp = new HashSet<>(); for (BlockPos pos : possibleBlocks) { - if (round(playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)), 1) == distToTreasure) { + if (round(getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)), 1) == distToTreasure) { temp.add(pos); } } possibleBlocks = temp; - updateSolutionState(); + checkAndDisplaySolutionState(); } else { BlockPos pos = possibleBlocks.iterator().next(); - if (Math.abs(distToTreasure - (playerPos.distanceTo(new Vec3Comparable(pos)))) > 5) { - currentState = SolutionState.INVALID; + if (Math.abs(distToTreasure - (getPlayerPos().distanceTo(new Vec3(pos)))) > 5) { + mc.thePlayer.addChatMessage(new ChatComponentText( + EnumChatFormatting.RED + "[NEU] Previous solution is invalid.")); + blockPosIfLastSolutionInvalid = pos.getImmutable(); + logDiagnosticData(false); + resetSolution(false); } } - } else if (centerNewlyDiscovered && possibleBlocks.size() > 1) { - updateSolutionState(); } - prevPlayerPos = playerPos; + prevPlayerPos = mc.thePlayer.getPosition().getImmutable(); prevDistToTreasure = distToTreasure; } - public static void setDebugDoNotUseCenter(boolean val) { - debugDoNotUseCenter = val; + private static void checkForSingleKnownLocationMatch() { + if (minesCenter == BlockPos.NULL_VECTOR || possibleBlocks.size() < 2) { + return; + } + + HashSet temp = possibleBlocks.stream() + .filter(block -> knownChestOffsets.contains(block.subtract(minesCenter).toLong())) + .collect(Collectors.toCollection(HashSet::new)); + if (temp.size() == 1) { + possibleBlocks = temp; + NEUDebugLogger.log(NEUDebugFlag.METAL, "Known location identified."); + } else if (temp.size() > 1) { + NEUDebugLogger.log(NEUDebugFlag.METAL, temp.size() + " known locations identified:"); + } } private static String getFriendlyBlockPositions(Collection positions) { @@ -254,13 +206,10 @@ public class CrystalMetalDetectorSolver { StringBuilder sb = new StringBuilder(); sb.append("\n"); for (BlockPos blockPos : positions) { - sb.append("Absolute: "); - sb.append(blockPos.toString()); + sb.append("Absolute: " + blockPos.toString()); if (minesCenter != Vec3i.NULL_VECTOR) { BlockPos relativeOffset = blockPos.subtract(minesCenter); - sb.append(", Relative: "); - sb.append(relativeOffset.toString() ); - sb.append(" (" + relativeOffset.toLong() + ")"); + sb.append(", Relative: " + relativeOffset.toString() + " (" + relativeOffset.toLong() + ")"); } sb.append("\n"); } @@ -268,23 +217,22 @@ public class CrystalMetalDetectorSolver { return sb.toString(); } - private static String getFriendlyEvaluatedPositions() { - if (!NEUDebugLogger.isFlagEnabled(NEUDebugFlag.METAL) || evaluatedPlayerPositions.size() == 0) { + private static String getFriendlyEvaluatedPositions(HashMap positions) { + if (!NEUDebugLogger.isFlagEnabled(NEUDebugFlag.METAL) || positions.size() == 0) { return ""; } StringBuilder sb = new StringBuilder(); sb.append("\n"); - for (Vec3Comparable vec : evaluatedPlayerPositions.keySet()) { - sb.append("Absolute: " + vec.toString()); + for (BlockPos blockPos : positions.keySet()) { + sb.append("Absolute: " + blockPos.toString()); if (minesCenter != Vec3i.NULL_VECTOR) { - BlockPos positionBlockPos = new BlockPos(vec); - BlockPos relativeOffset = positionBlockPos.subtract(minesCenter); + BlockPos relativeOffset = blockPos.subtract(minesCenter); sb.append(", Relative: " + relativeOffset.toString() + " (" + relativeOffset.toLong() + ")"); } sb.append(" Distance: "); - sb.append(evaluatedPlayerPositions.get(vec)); + sb.append(positions.get(blockPos)); sb.append("\n"); } @@ -292,8 +240,101 @@ public class CrystalMetalDetectorSolver { return sb.toString(); } + public static void logDiagnosticData(boolean outputAlways) { + if (SBInfo.getInstance().getLocation() == null) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] This command is not available outside SkyBlock")); + return; + } + + if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) + { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Metal Detector Solver is not enabled.")); + return; + } + + if (!outputAlways && !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL)) { + return; + } + + boolean originalDebugFlag = !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.add(NEUDebugFlag.METAL); + + StringBuilder diagsMessage = new StringBuilder(); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Mines Center: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((minesCenter == Vec3i.NULL_VECTOR) ? "" : minesCenter.toString()); + diagsMessage.append("\n"); + + diagsMessage.append("\n"); + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Previous Player Position: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Previous Distance To Treasure: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((prevDistToTreasure == 0) ? "" : prevDistToTreasure); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Last Solution Invalid Position: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((blockPosIfLastSolutionInvalid == null) ? "" : blockPosIfLastSolutionInvalid.toString()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Current Possible Blocks: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(possibleBlocks.size()); + diagsMessage.append(getFriendlyBlockPositions(possibleBlocks)); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Evaluated player positions: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(evaluatedPlayerPositions.size()); + diagsMessage.append(getFriendlyEvaluatedPositions(evaluatedPlayerPositions)); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Chest locations not on known list:\n"); + diagsMessage.append(EnumChatFormatting.WHITE); + if (minesCenter != Vec3i.NULL_VECTOR) { + HashSet locationsNotOnKnownList = openedChestPositions + .stream() + .filter(block -> !knownChestOffsets.contains(block.subtract(minesCenter).toLong())) + .map(block -> block.subtract(minesCenter)) + .collect(Collectors.toCollection(HashSet::new)); + if (locationsNotOnKnownList.size() > 0) { + for (BlockPos blockPos : locationsNotOnKnownList) { + diagsMessage.append(String.format( + "%dL,\t\t// x=%d, y=%d, z=%d", + blockPos.toLong(), + blockPos.getX(), + blockPos.getY(), + blockPos.getZ() + )); + } + } + } else { + diagsMessage.append(""); + } + + NEUDebugLogger.log(NEUDebugFlag.METAL, diagsMessage.toString()); + + if (!originalDebugFlag) { + NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.remove(NEUDebugFlag.METAL); + } + } + public static void resetSolution(Boolean chestFound) { if (chestFound) { + blockPosIfLastSolutionInvalid = null; prevPlayerPos = null; prevDistToTreasure = 0; if (possibleBlocks.size() == 1) { @@ -304,18 +345,15 @@ public class CrystalMetalDetectorSolver { chestRecentlyFound = chestFound; possibleBlocks.clear(); evaluatedPlayerPositions.clear(); - previousState = currentState; - currentState = SolutionState.NOT_STARTED; } public static void initWorld() { minesCenter = Vec3i.NULL_VECTOR; visitKeeperMessagePrinted = false; + blockPosIfLastSolutionInvalid = null; openedChestPositions.clear(); - chestLastFoundMillis = 0; prevDistToTreasure = 0; prevPlayerPos = null; - currentState = SolutionState.NOT_STARTED; resetSolution(false); } @@ -339,14 +377,15 @@ public class CrystalMetalDetectorSolver { } } - private static boolean locateMinesCenterIfNeeded() { + private static void locateMinesCenterIfNeeded() { if (minesCenter != Vec3i.NULL_VECTOR) { - return false; + return; } List keeperEntities = mc.theWorld.getEntities(EntityArmorStand.class, (entity) -> { if (!entity.hasCustomName()) return false; - return entity.getCustomNameTag().contains(KEEPER_OF_STRING); + if (entity.getCustomNameTag().contains(KEEPER_OF_STRING)) return true; + return false; }); if (keeperEntities.size() == 0) { @@ -355,7 +394,7 @@ public class CrystalMetalDetectorSolver { "[NEU] Approach a Keeper while holding the metal detector to enable faster treasure hunting.")); visitKeeperMessagePrinted = true; } - return false; + return; } EntityArmorStand keeperEntity = keeperEntities.get(0); @@ -368,11 +407,6 @@ public class CrystalMetalDetectorSolver { EnumChatFormatting.WHITE + minesCenter.toString()); mc.thePlayer.addChatMessage(new ChatComponentText( EnumChatFormatting.YELLOW + "[NEU] Faster treasure hunting is now enabled based on Keeper location.")); - return true; - } - - public static void setMinesCenter(BlockPos center) { - minesCenter = center; } private static double round(double value, int precision) { @@ -380,174 +414,42 @@ public class CrystalMetalDetectorSolver { return (double) Math.round(value * scale) / scale; } - private static void updateSolutionState() { - previousState = currentState; - + private static void checkAndDisplaySolutionState() { if (possibleBlocks.size() == 0) { - currentState = SolutionState.FAILED; - return; - } - - if (possibleBlocks.size() == 1) { - currentState = SolutionState.FOUND; + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Failed to find a solution.")); + logDiagnosticData(false); + resetSolution(false); return; } - // Narrow solutions using known locations if the mines center is known - if (minesCenter.equals(BlockPos.NULL_VECTOR) || debugDoNotUseCenter) { - currentState = SolutionState.MULTIPLE; - return; - } - - HashSet temp = - possibleBlocks.stream() - .filter(block -> knownChestOffsets.contains(block.subtract(minesCenter).toLong())) - .collect(Collectors.toCollection(HashSet::new)); - if (temp.size() == 0) { - currentState = SolutionState.MULTIPLE; - return; - } - - if (temp.size() == 1) { - possibleBlocks = temp; - currentState = SolutionState.FOUND_KNOWN; - return; - - } - - currentState = SolutionState.MULTIPLE_KNOWN; - } - - public static BlockPos getSolution() { - if (CrystalMetalDetectorSolver.possibleBlocks.size() != 1) { - return BlockPos.ORIGIN; + checkForSingleKnownLocationMatch(); + if (possibleBlocks.size() > 1) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Need another position to find solution. Possible blocks: " + possibleBlocks.size())); + } else { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] Found solution.")); } - - return CrystalMetalDetectorSolver.possibleBlocks.stream().iterator().next(); } - private static Vec3Comparable getPlayerPosAdjustedForEyeHeight() { - return new Vec3Comparable( + private static Vec3 getPlayerPos() { + return new Vec3( mc.thePlayer.posX, mc.thePlayer.posY + (mc.thePlayer.getEyeHeight() - mc.thePlayer.getDefaultEyeHeight()), mc.thePlayer.posZ ); } - static boolean isKnownOffset(BlockPos pos) { - return knownChestOffsets.contains(pos.subtract(minesCenter).toLong()); - } - - static boolean isAllowedBlockType(BlockPos pos) { - return mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:gold_block") || + private static boolean treasureAllowed(BlockPos pos) { + boolean airAbove = mc.theWorld. + getBlockState(pos.add(0, 1, 0)).getBlock().getRegistryName().equals("minecraft:air"); + boolean allowedBlockType = mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:gold_block") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:prismarine") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:chest") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_glass") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_glass_pane") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:wool") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_hardened_clay"); - } - - static boolean isAirAbove(BlockPos pos) { - return mc.theWorld. - getBlockState(pos.add(0, 1, 0)).getBlock().getRegistryName().equals("minecraft:air"); - } - - private static boolean treasureAllowed(BlockPos pos) { - boolean airAbove = isAirAbove(pos); - boolean allowedBlockType = isAllowedBlockType(pos); - return isKnownOffset(pos) || (airAbove && allowedBlockType); - } - - static private String getDiagnosticMessage() { - StringBuilder diagsMessage = new StringBuilder(); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Mines Center: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((minesCenter.equals(Vec3i.NULL_VECTOR)) ? "" : minesCenter.toString()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Current Solution State: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(currentState.name()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Previous Solution State: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(previousState.name()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Previous Player Position: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Previous Distance To Treasure: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((prevDistToTreasure == 0) ? "" : prevDistToTreasure); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Current Possible Blocks: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(possibleBlocks.size()); - diagsMessage.append(getFriendlyBlockPositions(possibleBlocks)); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Evaluated player positions: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(evaluatedPlayerPositions.size()); - diagsMessage.append(getFriendlyEvaluatedPositions()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Chest locations not on known list:\n"); - diagsMessage.append(EnumChatFormatting.WHITE); - if (minesCenter != Vec3i.NULL_VECTOR) { - HashSet locationsNotOnKnownList = openedChestPositions - .stream() - .filter(block -> !knownChestOffsets.contains(block.subtract(minesCenter).toLong())) - .map(block -> block.subtract(minesCenter)) - .collect(Collectors.toCollection(HashSet::new)); - if (locationsNotOnKnownList.size() > 0) { - for (BlockPos blockPos : locationsNotOnKnownList) { - diagsMessage.append(String.format( - "%dL,\t\t// x=%d, y=%d, z=%d", - blockPos.toLong(), - blockPos.getX(), - blockPos.getY(), - blockPos.getZ() - )); - } - } - } else { - diagsMessage.append(""); - } - - return diagsMessage.toString(); - } - - public static void logDiagnosticData(boolean outputAlways) { - if (!SBInfo.getInstance().checkForSkyblockLocation()) { - return; - } - - if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) - { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Metal Detector Solver is not enabled.")); - return; - } - - boolean metalDebugFlagSet = NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL); - if (outputAlways || metalDebugFlagSet) { - NEUDebugLogger.logAlways(getDiagnosticMessage()); - } + boolean knownOffset = knownChestOffsets.contains(pos.subtract(minesCenter).toLong()); + return airAbove & (knownOffset | allowedBlockType); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java index 9a950e7f..25f39c3a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java @@ -2,67 +2,27 @@ package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.core.util.Line; -import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; -import io.github.moulberry.notenoughupdates.options.NEUConfig; import io.github.moulberry.notenoughupdates.options.customtypes.NEUDebugFlag; import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; import io.github.moulberry.notenoughupdates.util.SBInfo; -import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.event.ClickEvent; +import net.minecraft.event.HoverEvent; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.Vec3i; -import net.minecraftforge.client.ClientCommandHandler; +import net.minecraft.util.Vec3; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.function.BooleanSupplier; -import java.util.function.LongSupplier; - public class CrystalWishingCompassSolver { - enum SolverState { - NOT_STARTED, - PROCESSING_FIRST_USE, - NEED_SECOND_COMPASS, - PROCESSING_SECOND_USE, - SOLVED, - FAILED_EXCEPTION, - FAILED_TIMEOUT_NO_REPEATING, - FAILED_TIMEOUT_NO_PARTICLES, - FAILED_INTERSECTION_CALCULATION, - FAILED_INVALID_SOLUTION, - } - - enum CompassTarget { - GOBLIN_QUEEN, - GOBLIN_KING, - BAL, - JUNGLE_TEMPLE, - ODAWA, - PRECURSOR_CITY, - MINES_OF_DIVAN, - CRYSTAL_NUCLEUS, - } - - enum Crystal { - AMBER, - AMETHYST, - JADE, - SAPPHIRE, - TOPAZ, - } - private static final CrystalWishingCompassSolver INSTANCE = new CrystalWishingCompassSolver(); public static CrystalWishingCompassSolver getInstance() { return INSTANCE; @@ -71,72 +31,40 @@ public class CrystalWishingCompassSolver { private static final Minecraft mc = Minecraft.getMinecraft(); private static boolean isSkytilsPresent = false; - // NOTE: There is a small set of breakable blocks above the nucleus at Y > 181. While this zone is reported - // as the Crystal Nucleus by Hypixel, for wishing compass purposes it is in the appropriate quadrant. - private static final AxisAlignedBB NUCLEUS_BB = new AxisAlignedBB(462, 63, 461, 564, 181, 565); - private static final AxisAlignedBB HOLLOWS_BB = new AxisAlignedBB(201, 30, 201, 824, 189, 824); - private static final AxisAlignedBB PRECURSOR_REMNANTS_BB = new AxisAlignedBB(513, 64, 513, 824, 189, 824); - private static final AxisAlignedBB MITHRIL_DEPOSITS_BB = new AxisAlignedBB(513, 64, 201, 824, 189, 512); - private static final AxisAlignedBB GOBLIN_HOLDOUT_BB = new AxisAlignedBB(201, 64, 513, 512, 189, 824); - private static final AxisAlignedBB JUNGLE_BB = new AxisAlignedBB(201, 64, 201, 512, 189, 512); - private static final AxisAlignedBB MAGMA_FIELDS_BB = new AxisAlignedBB(201, 30, 201, 824, 63, 824); - private static final double MAX_DISTANCE_BETWEEN_PARTICLES = 0.6; - private static final double MAX_DISTANCE_FROM_USE_TO_FIRST_PARTICLE = 9.0; - - // 64.0 is an arbitrary value but seems to work well - private static final double MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES = 64.0; - - // All particles typically arrive in < 3500, so 5000 should be enough buffer - public static final long ALL_PARTICLES_MAX_MILLIS = 5000L; - - public LongSupplier currentTimeMillis = System::currentTimeMillis; - public BooleanSupplier kingsScentPresent = this::isKingsScentPresent; - public BooleanSupplier keyInInventory = this::isKeyInInventory; - public interface CrystalEnumSetSupplier { - EnumSet getAsCrystalEnumSet(); - } - public CrystalEnumSetSupplier foundCrystals = this::getFoundCrystals; - - private SolverState solverState; - private Compass firstCompass; - private Compass secondCompass; - private Line solutionIntersectionLine; - private EnumSet possibleTargets; - private Vec3Comparable solution; - private Vec3Comparable originalSolution; - private EnumSet solutionPossibleTargets; - - public SolverState getSolverState() { - return solverState; - } - - public Vec3i getSolutionCoords() { - return new Vec3i(solution.xCoord, solution.yCoord, solution.zCoord); - } - - public EnumSet getPossibleTargets() { - return possibleTargets; + // Crystal Nucleus unbreakable blocks, area coordinates reported by Hypixel server are slightly different + private static final AxisAlignedBB NUCLEUS_BB = new AxisAlignedBB(463, 63, 460, 563, 181, 564); + private static final double MAX_COMPASS_PARTICLE_SPREAD = 16; + + private static BlockPos prevPlayerPos; + private long compassUsedMillis = 0; + private Vec3 firstParticle = null; + private Vec3 lastParticle = null; + private double lastParticleDistanceFromFirst = 0; + private Line firstCompassLine = null; + private Line secondCompassLine = null; + private Vec3 solution = null; + private Line solutionIntersectionLine = null; + + private void resetForNewCompass() { + compassUsedMillis = 0; + firstParticle = null; + lastParticle = null; + lastParticleDistanceFromFirst = 0; } private void resetForNewTarget() { NEUDebugLogger.log(NEUDebugFlag.WISHING,"Resetting for new target"); - solverState = SolverState.NOT_STARTED; - firstCompass = null; - secondCompass = null; + resetForNewCompass(); + firstCompassLine = null; + secondCompassLine = null; solutionIntersectionLine = null; - possibleTargets = null; + prevPlayerPos = null; solution = null; - originalSolution = null; - solutionPossibleTargets = null; - } - - public void initWorld() { - resetForNewTarget(); } @SubscribeEvent public void onWorldLoad(WorldEvent.Unload event) { - initWorld(); + resetForNewTarget(); isSkytilsPresent = Loader.isModLoaded("skytils"); } @@ -162,101 +90,28 @@ public class CrystalWishingCompassSolver { return; } - BlockPos playerPos = mc.thePlayer.getPosition().getImmutable(); - try { - HandleCompassResult result = handleCompassUse(playerPos); - switch (result) { - case SUCCESS: - return; - case STILL_PROCESSING_PRIOR_USE: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Wait a little longer before using the wishing compass again.")); - event.setCanceled(true); - break; - case LOCATION_TOO_CLOSE: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Move a little further before using the wishing compass again.")); - event.setCanceled(true); - break; - case POSSIBLE_TARGETS_CHANGED: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Possible wishing compass targets have changed. Solver has been reset.")); - event.setCanceled(true); - break; - case NO_PARTICLES_FOR_PREVIOUS_COMPASS: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] No particles detected for prior compass use. Need another position to solve.")); - break; - case PLAYER_IN_NUCLEUS: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Wishing compass must be used outside the nucleus for accurate results.")); - event.setCanceled(true); - break; - default: - throw new IllegalStateException("Unexpected wishing compass solver state: \n" + getDiagnosticMessage()); + if (isSolved()) { + resetForNewTarget(); + } + + // 64.0 is an arbitrary value but seems to work well + if (prevPlayerPos != null && prevPlayerPos.distanceSq(mc.thePlayer.getPosition()) < 64.0) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Move a little further before using the wishing compass again.")); + event.setCanceled(true); + return; } + + prevPlayerPos = mc.thePlayer.getPosition().getImmutable(); + compassUsedMillis = System.currentTimeMillis(); } catch (Exception e) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Error processing wishing compass action - see log for details")); e.printStackTrace(); - event.setCanceled(true); - solverState = SolverState.FAILED_EXCEPTION; } } - public HandleCompassResult handleCompassUse(BlockPos playerPos) { - long lastCompassUsedMillis = 0; - switch (solverState) { - case PROCESSING_SECOND_USE: - if (secondCompass != null) { - lastCompassUsedMillis = secondCompass.whenUsedMillis; - } - case PROCESSING_FIRST_USE: - if (lastCompassUsedMillis == 0 && firstCompass != null) { - lastCompassUsedMillis = firstCompass.whenUsedMillis; - } - if (lastCompassUsedMillis != 0 && - (currentTimeMillis.getAsLong() > lastCompassUsedMillis + ALL_PARTICLES_MAX_MILLIS)) { - return HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; - } - - return HandleCompassResult.STILL_PROCESSING_PRIOR_USE; - case SOLVED: - case FAILED_EXCEPTION: - case FAILED_TIMEOUT_NO_REPEATING: - case FAILED_TIMEOUT_NO_PARTICLES: - case FAILED_INTERSECTION_CALCULATION: - case FAILED_INVALID_SOLUTION: - resetForNewTarget(); - // falls through, NOT_STARTED is the state when resetForNewTarget returns - case NOT_STARTED: - if (NUCLEUS_BB.isVecInside(new Vec3Comparable(playerPos.getX(), playerPos.getY(), playerPos.getZ()))) { - return HandleCompassResult.PLAYER_IN_NUCLEUS; - } - - firstCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); - solverState = SolverState.PROCESSING_FIRST_USE; - possibleTargets = calculatePossibleTargets(playerPos); - return HandleCompassResult.SUCCESS; - case NEED_SECOND_COMPASS: - if (firstCompass.whereUsed.distanceSq(playerPos) < MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES) { - return HandleCompassResult.LOCATION_TOO_CLOSE; - } - - if (!possibleTargets.equals(calculatePossibleTargets(playerPos))) { - resetForNewTarget(); - return HandleCompassResult.POSSIBLE_TARGETS_CHANGED; - } - - secondCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); - solverState = SolverState.PROCESSING_SECOND_USE; - return HandleCompassResult.SUCCESS; - } - - throw new IllegalStateException("Unexpected compass state" ); - } - /* * Processes particles if the wishing compass was used within the last 5 seconds. * @@ -287,701 +142,188 @@ public class CrystalWishingCompassSolver { ) { if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver || particleType != EnumParticleTypes.VILLAGER_HAPPY || - !SBInfo.getInstance().getLocation().equals("crystal_hollows")) { + !SBInfo.getInstance().getLocation().equals("crystal_hollows") || + isSolved() || + System.currentTimeMillis() - compassUsedMillis > 5000) { return; } try { - SolverState originalSolverState = solverState; - solveUsingParticle(x, y, z, currentTimeMillis.getAsLong()); - if (solverState != originalSolverState) { - switch (solverState) { - case SOLVED: - showSolution(); - break; - case FAILED_EXCEPTION: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Unable to determine wishing compass target.")); - logDiagnosticData(false); - break; - case FAILED_TIMEOUT_NO_REPEATING: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Timed out waiting for repeat set of compass particles.")); - logDiagnosticData(false); - break; - case FAILED_TIMEOUT_NO_PARTICLES: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Timed out waiting for compass particles.")); - logDiagnosticData(false); - break; - case FAILED_INTERSECTION_CALCULATION: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Unable to determine intersection of wishing compasses.")); - logDiagnosticData(false); - break; - case FAILED_INVALID_SOLUTION: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Failed to find solution.")); - logDiagnosticData(false); - break; - case NEED_SECOND_COMPASS: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Need another position to determine wishing compass target.")); - break; - } - } - } catch (Exception e) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Exception while calculating wishing compass solution - see log for details")); - e.printStackTrace(); - } - } - - /** - * - * @param x Particle x coordinate - * @param y Particle y coordinate - * @param z Particle z coordinate - */ - public void solveUsingParticle(double x, double y, double z, long currentTimeMillis) { - Compass currentCompass; - switch (solverState) { - case PROCESSING_FIRST_USE: - currentCompass = firstCompass; - break; - case PROCESSING_SECOND_USE: - currentCompass = secondCompass; - break; - default: - return; - } - - currentCompass.processParticle(x, y, z, currentTimeMillis); - switch (currentCompass.compassState) { - case FAILED_TIMEOUT_NO_PARTICLES: - solverState = SolverState.FAILED_TIMEOUT_NO_PARTICLES; + Vec3 particleVec = new Vec3(x, y, z); + if (firstParticle == null) { + firstParticle = particleVec; return; - case FAILED_TIMEOUT_NO_REPEATING: - solverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; - return; - case WAITING_FOR_FIRST_PARTICLE: - case COMPUTING_LAST_PARTICLE: - return; - case COMPLETED: - if (solverState == SolverState.NEED_SECOND_COMPASS) { - return; - } - if (solverState == SolverState.PROCESSING_FIRST_USE) { - solverState = SolverState.NEED_SECOND_COMPASS; - return; - } - break; - } - - // First and Second compasses have completed - solutionIntersectionLine = firstCompass.line.getIntersectionLineSegment(secondCompass.line); - - if (solutionIntersectionLine == null) { - solverState = SolverState.FAILED_INTERSECTION_CALCULATION; - return; - } - - solution = new Vec3Comparable(solutionIntersectionLine.getMidpoint()); - - Vec3Comparable firstDirection = firstCompass.getDirection(); - Vec3Comparable firstSolutionDirection = firstCompass.getDirectionTo(solution); - Vec3Comparable secondDirection = secondCompass.getDirection(); - Vec3Comparable secondSolutionDirection = secondCompass.getDirectionTo(solution); - if (!firstDirection.signumEquals(firstSolutionDirection) || - !secondDirection.signumEquals(secondSolutionDirection) || - !HOLLOWS_BB.isVecInside(solution)) { - solverState = SolverState.FAILED_INVALID_SOLUTION; - return; - } - - solutionPossibleTargets = getSolutionTargets(possibleTargets, solution); - - // Adjust the Jungle Temple solution coordinates - if (solutionPossibleTargets.size() == 1 && - solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE)) { - originalSolution = solution; - solution = solution.addVector(-57, 36, -21); - } - - solverState = SolverState.SOLVED; - } - - private boolean isKeyInInventory() - { - for (ItemStack item : mc.thePlayer.inventory.mainInventory){ - if (item != null && item.getDisplayName().contains("Jungle Key")) { - return true; } - } - return false; - } - - private boolean isKingsScentPresent() - { - return SBInfo.getInstance().footer.getUnformattedText().contains("King's Scent I"); - } - - private EnumSet getFoundCrystals() { - EnumSet foundCrystals = EnumSet.noneOf(Crystal.class); - NEUConfig.HiddenProfileSpecific perProfileConfig = NotEnoughUpdates.INSTANCE.config.getProfileSpecific(); - if (perProfileConfig == null) return foundCrystals; - HashMap crystals = perProfileConfig.crystals; - for (String crystalName : crystals.keySet()) { - Integer crystalState = crystals.get(crystalName); - if (crystalState != null && crystalState > 0) { - foundCrystals.add(Crystal.valueOf(crystalName.toUpperCase())); - } - } - - return foundCrystals; - } - - // Returns candidates based on seen Y coordinates and quadrants that - // are not adjacent to the solution's quadrant. If the solution is - // the nucleus then a copy of the original possible targets is - // returned. - // - // NOTE: Adjacent quadrant filtering could be improved based on - // structure sizes in the future to only allow a certain - // distance into the adjacent quadrant. - // - // |----------|------------| - // | Jungle | Mithril | - // | | Deposits | - // |----------|----------- | - // | Goblin | Precursor | - // | Holdout | Deposits | - // |----------|------------| - static public EnumSet getSolutionTargets( - EnumSet possibleTargets, - Vec3Comparable solution) { - EnumSet solutionPossibleTargets; - solutionPossibleTargets = possibleTargets.clone(); - - if (NUCLEUS_BB.isVecInside(solution)) { - return solutionPossibleTargets; - } - - solutionPossibleTargets.remove(CompassTarget.CRYSTAL_NUCLEUS); - - // Eliminate non-adjacent zones first - if (MITHRIL_DEPOSITS_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); - solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); - } else if (PRECURSOR_REMNANTS_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.ODAWA); - solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); - } else if (GOBLIN_HOLDOUT_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); - } else if (JUNGLE_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); - } - // If there's only 1 possible target then don't remove based - // on Y coordinates since assumptions about Y coordinates could - // be wrong. - if (solutionPossibleTargets.size() > 1) { - // Y coordinates are 43-70 from 11 samples - if (solutionPossibleTargets.contains(CompassTarget.BAL) && - solution.yCoord > 72) { - solutionPossibleTargets.remove(CompassTarget.BAL); + double distanceFromFirst = particleVec.distanceTo(firstParticle); + if (distanceFromFirst > MAX_COMPASS_PARTICLE_SPREAD) { + return; } - // Y coordinates are 93-157 from 10 samples, may be able to filter - // more based on the offset of the King within the structure - if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && - solution.yCoord < 64) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); + if (distanceFromFirst >= lastParticleDistanceFromFirst) { + lastParticleDistanceFromFirst = distanceFromFirst; + lastParticle = particleVec; + return; } - // Y coordinates are 129-139 from 10 samples - if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && - (solution.yCoord < 127 || solution.yCoord > 141)) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); + // We get here when the second repetition of particles begins. + // Since the second repetition overlaps with the last few particles + // of the first repetition, the last particle we capture isn't truly the last. + // But that's OK since subsequent particles will be on the same line. + Line line = new Line(firstParticle, lastParticle); + if (firstCompassLine == null) { + firstCompassLine = line; + resetForNewCompass(); + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Need another position to determine wishing compass target.")); + return; } - // Y coordinates are 72-80 from 10 samples - if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && - (solution.yCoord < 70 || solution.yCoord > 82)) { - solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); + secondCompassLine = line; + solutionIntersectionLine = firstCompassLine.getIntersectionLineSegment(secondCompassLine); + if (solutionIntersectionLine == null) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Unable to determine wishing compass target.")); + logDiagnosticData(false); + return; } - // Y coordinates are 110-128 from 3 samples, not enough data to use - if (solutionPossibleTargets.contains(CompassTarget.ODAWA) && - solution.yCoord < 64) { - solutionPossibleTargets.remove(CompassTarget.ODAWA); - } + solution = solutionIntersectionLine.getMidpoint(); - // Y coordinates are 122-129 from 8 samples - if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && - (solution.yCoord < 119 || solution.yCoord > 132)) { - solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); + if (solution.distanceTo(firstParticle) < 8) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] WARNING: Solution is likely incorrect.")); + logDiagnosticData(false); + return; } - // Y coordinates are 98-102 from 15 samples - if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && - (solution.yCoord < 96 || solution.yCoord > 104)) { - solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); - } + showSolution(); + } catch (Exception e) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Exception while calculating wishing compass solution - see log for details")); + e.printStackTrace(); } - - return solutionPossibleTargets; } - private EnumSet calculatePossibleTargets(BlockPos playerPos) { - boolean targetsBasedOnZoneWithoutCrystal = false; - EnumSet candidateTargets = EnumSet.allOf(CompassTarget.class); - EnumSet foundCrystals = this.foundCrystals.getAsCrystalEnumSet(); - Vec3Comparable playerPosVec = new Vec3Comparable(playerPos); - - // If the current zone's crystal hasn't been found then remove all non-nucleus candidates other - // than the ones in the current zone. The one exception is that the king is kept when in the jungle - // since the compass can point to the king if odawa is missing (which often happens). - // The nucleus is kept since it can be returned if the structure for the current zone is missing. - if (GOBLIN_HOLDOUT_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMBER)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.GOBLIN_KING); - candidateTargets.add(CompassTarget.GOBLIN_QUEEN); - targetsBasedOnZoneWithoutCrystal = true; - } - - if (JUNGLE_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMETHYST)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.ODAWA); - candidateTargets.add(CompassTarget.JUNGLE_TEMPLE); - if (!keyInInventory.getAsBoolean() && !kingsScentPresent.getAsBoolean()) { - // If Odawa is missing then the king may be returned - candidateTargets.add(CompassTarget.GOBLIN_KING); - } - targetsBasedOnZoneWithoutCrystal = true; - } - - if (MITHRIL_DEPOSITS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.JADE)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.MINES_OF_DIVAN); - targetsBasedOnZoneWithoutCrystal = true; - } - - if (PRECURSOR_REMNANTS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.SAPPHIRE)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.PRECURSOR_CITY); - targetsBasedOnZoneWithoutCrystal = true; - } - - if (MAGMA_FIELDS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.TOPAZ)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.BAL); - targetsBasedOnZoneWithoutCrystal = true; - } - - if (!targetsBasedOnZoneWithoutCrystal) { - // Filter out crystal-based targets outside the current zone - if (foundCrystals.contains(Crystal.AMBER)) { - candidateTargets.remove(CompassTarget.GOBLIN_KING); - candidateTargets.remove(CompassTarget.GOBLIN_QUEEN); - } - - if (foundCrystals.contains(Crystal.AMETHYST)) { - candidateTargets.remove(CompassTarget.ODAWA); - candidateTargets.remove(CompassTarget.JUNGLE_TEMPLE); - } - - if (foundCrystals.contains(Crystal.JADE)) { - candidateTargets.remove(CompassTarget.MINES_OF_DIVAN); - } - - if (foundCrystals.contains(Crystal.TOPAZ)) { - candidateTargets.remove(CompassTarget.BAL); - } - - if (foundCrystals.contains(Crystal.SAPPHIRE)) { - candidateTargets.remove(CompassTarget.PRECURSOR_CITY); - } - } - - candidateTargets.remove(kingsScentPresent.getAsBoolean() ? CompassTarget.GOBLIN_KING : CompassTarget.GOBLIN_QUEEN); - candidateTargets.remove(keyInInventory.getAsBoolean() ? CompassTarget.ODAWA : CompassTarget.JUNGLE_TEMPLE); - - return candidateTargets; + private boolean isSolved() { + return solution != null; } - private String getFriendlyNameForCompassTarget(CompassTarget compassTarget) { - switch (compassTarget) { - case BAL: return EnumChatFormatting.RED + "Bal"; - case ODAWA: return EnumChatFormatting.GREEN + "Odawa"; - case JUNGLE_TEMPLE: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.GREEN + "Jungle Temple"; - case GOBLIN_KING: return EnumChatFormatting.GOLD + "King Yolkar"; - case GOBLIN_QUEEN: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.YELLOW + "Goblin Queen"; - case PRECURSOR_CITY: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.WHITE + "Precursor City"; - case MINES_OF_DIVAN: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.BLUE + "Mines of Divan"; - default: return EnumChatFormatting.WHITE + "an undetermined location"; - } - } + private void showSolution() { + if (solution == null) return; + String description = "[NEU] Wishing compass target: "; + String coordsText = String.format("%.0f %.0f %.0f", + solution.xCoord, + solution.yCoord, + solution.zCoord); - private String getNameForCompassTarget(CompassTarget compassTarget) { - boolean useSkytilsNames = (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassWaypointNameType == 1); - switch (compassTarget) { - case BAL: return useSkytilsNames ? "internal_bal" : "Bal"; - case ODAWA: return "Odawa"; - case JUNGLE_TEMPLE: return useSkytilsNames ? "internal_temple" : "Temple"; - case GOBLIN_KING: return useSkytilsNames ? "internal_king" : "King"; - case GOBLIN_QUEEN: return useSkytilsNames ? "internal_den" : "Queen"; - case PRECURSOR_CITY: return useSkytilsNames ? "internal_city" : "City"; - case MINES_OF_DIVAN: return useSkytilsNames ? "internal_mines" : "Mines"; - default: return "WishingTarget"; + if (NUCLEUS_BB.isVecInside(solution)) { + description += "Crystal Nucleus (" + coordsText + ")"; + } else { + description += coordsText; } - } - private String getSolutionCoordsText() { - return solution == null ? "" : - String.format("%.0f %.0f %.0f", solution.xCoord, solution.yCoord, solution.zCoord); - } + ChatComponentText message = new ChatComponentText(EnumChatFormatting.YELLOW + description); - private String getWishingCompassDestinationsMessage() { - StringBuilder sb = new StringBuilder(); - sb.append(EnumChatFormatting.YELLOW); - sb.append("[NEU] "); - sb.append(EnumChatFormatting.AQUA); - sb.append("Wishing compass points to "); - int index = 1; - for (CompassTarget target : solutionPossibleTargets) { - if (index > 1) { - sb.append(EnumChatFormatting.AQUA); - if (index == solutionPossibleTargets.size()) { - sb.append(" or "); - } else { - sb.append(", "); - } - } - sb.append(getFriendlyNameForCompassTarget(target)); - index++; + if (isSkytilsPresent) { + ChatStyle clickEvent = new ChatStyle().setChatClickEvent( + new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sthw add WishingTarget " + coordsText)); + clickEvent.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ChatComponentText( + EnumChatFormatting.YELLOW + + "Add Skytils hollows waypoint"))); + message.setChatStyle(clickEvent); } - sb.append(EnumChatFormatting.AQUA); - sb.append(" ("); - sb.append(getSolutionCoordsText()); - sb.append(")"); - return sb.toString(); + Minecraft.getMinecraft().thePlayer.addChatMessage(message); } - private void showSolution() { - if (solution == null) return; - - if (NUCLEUS_BB.isVecInside(solution)) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] " + - EnumChatFormatting.AQUA + "Wishing compass target is the Crystal Nucleus")); + public void logDiagnosticData(boolean outputAlways) { + if (SBInfo.getInstance().getLocation() == null) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] This command is not available outside SkyBlock")); return; } - String destinationMessage = getWishingCompassDestinationsMessage(); - - if (!isSkytilsPresent) { - mc.thePlayer.addChatMessage(new ChatComponentText(destinationMessage)); + if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) + { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Wishing Compass Solver is not enabled.")); return; } - String targetNameForSkytils = solutionPossibleTargets.size() == 1 ? - getNameForCompassTarget(solutionPossibleTargets.iterator().next()) : - "WishingTarget"; - String skytilsCommand = String.format("/sthw add %s %s", targetNameForSkytils, getSolutionCoordsText()); - if (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassAutocreateKnownWaypoints && - solutionPossibleTargets.size() == 1) { - mc.thePlayer.addChatMessage(new ChatComponentText(destinationMessage)); - int commandResult = ClientCommandHandler.instance.executeCommand(mc.thePlayer, skytilsCommand); - if (commandResult == 1) - { - return; - } - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Failed to automatically run /sthw")); + if (!outputAlways && !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.WISHING)) { + return; } - destinationMessage += EnumChatFormatting.YELLOW + " [Add Skytils Waypoint]"; - ChatComponentText chatMessage = new ChatComponentText(destinationMessage); - chatMessage.setChatStyle(Utils.createClickStyle(ClickEvent.Action.RUN_COMMAND, - skytilsCommand, - EnumChatFormatting.YELLOW + "Set waypoint for wishing target\n")); - mc.thePlayer.addChatMessage(chatMessage); - } + boolean originalDebugFlag = !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.add(NEUDebugFlag.WISHING); - private String getDiagnosticMessage() { StringBuilder diagsMessage = new StringBuilder(); + diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Solver State: "); + diagsMessage.append("Skytils Present: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(solverState.name()); + diagsMessage.append(isSkytilsPresent); diagsMessage.append("\n"); - if (firstCompass == null) { - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("First Compass: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(""); - diagsMessage.append("\n"); - } else { - firstCompass.appendCompassDiagnostics(diagsMessage, "First Compass"); - } - - if (secondCompass == null) { - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Second Compass: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(""); - diagsMessage.append("\n"); - } else { - secondCompass.appendCompassDiagnostics(diagsMessage, "Second Compass"); - } - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Intersection Line: "); + diagsMessage.append("Compass Used Millis: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((solutionIntersectionLine == null) ? "" : solutionIntersectionLine); + diagsMessage.append(compassUsedMillis); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Jungle Key in Inventory: "); + diagsMessage.append("Compass Used Position: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(isKeyInInventory()); + diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("King's Scent Present: "); + diagsMessage.append("First Particle: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(isKingsScentPresent()); + diagsMessage.append((firstParticle == null) ? "" : firstParticle.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("First Compass Targets: "); + diagsMessage.append("Last Particle: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(possibleTargets == null ? "" : possibleTargets.toString()); + diagsMessage.append((lastParticle == null) ? "" : lastParticle.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Current Calculated Targets: "); + diagsMessage.append("Last Particle Distance From First: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(calculatePossibleTargets(mc.thePlayer.getPosition())); + diagsMessage.append(lastParticleDistanceFromFirst); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Found Crystals: "); + diagsMessage.append("First Compass Line: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(getFoundCrystals()); + diagsMessage.append((firstCompassLine == null) ? "" : firstCompassLine.toString()); diagsMessage.append("\n"); - if (originalSolution != null) { - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Original Solution: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(originalSolution); - diagsMessage.append("\n"); - } - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Solution: "); + diagsMessage.append("Second Compass Line: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((solution == null) ? "" : solution.toString()); + diagsMessage.append((secondCompassLine == null) ? "" : secondCompassLine.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Solution Targets: "); + diagsMessage.append("Intersection Line: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((solutionPossibleTargets == null) ? "" : solutionPossibleTargets.toString()); + diagsMessage.append((secondCompassLine == null) ? "" : solutionIntersectionLine); diagsMessage.append("\n"); - return diagsMessage.toString(); - } - - public void logDiagnosticData(boolean outputAlways) { - if (!SBInfo.getInstance().checkForSkyblockLocation()) { - return; - } - - if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) - { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Wishing Compass Solver is not enabled.")); - return; - } - - boolean wishingDebugFlagSet = NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.WISHING); - if (outputAlways || wishingDebugFlagSet) { - NEUDebugLogger.logAlways(getDiagnosticMessage()); - } - } - - enum CompassState { - WAITING_FOR_FIRST_PARTICLE, - COMPUTING_LAST_PARTICLE, - COMPLETED, - FAILED_TIMEOUT_NO_REPEATING, - FAILED_TIMEOUT_NO_PARTICLES, - } - - enum HandleCompassResult { - SUCCESS, - LOCATION_TOO_CLOSE, - STILL_PROCESSING_PRIOR_USE, - POSSIBLE_TARGETS_CHANGED, - NO_PARTICLES_FOR_PREVIOUS_COMPASS, - PLAYER_IN_NUCLEUS - } - - static class Compass { - public CompassState compassState; - public Line line = null; - - private final BlockPos whereUsed; - private final long whenUsedMillis; - private Vec3Comparable firstParticle = null; - private Vec3Comparable previousParticle = null; - private Vec3Comparable lastParticle = null; - private final ArrayList processedParticles; - - Compass(BlockPos whereUsed, long whenUsedMillis) { - this.whereUsed = whereUsed; - this.whenUsedMillis = whenUsedMillis; - compassState = CompassState.WAITING_FOR_FIRST_PARTICLE; - processedParticles = new ArrayList<>(); - } - - public Vec3Comparable getDirection() { - if (firstParticle == null || lastParticle == null) { - return null; - } - - return new Vec3Comparable(firstParticle.subtractReverse(lastParticle).normalize()); - } - - public Vec3Comparable getDirectionTo(Vec3Comparable target) { - if (firstParticle == null || target == null) { - return null; - } - - return new Vec3Comparable(firstParticle.subtractReverse(target).normalize()); - } - - public double particleSpread() { - if (firstParticle == null || lastParticle == null) { - return 0.0; - } - return firstParticle.distanceTo(lastParticle); - } - - public void processParticle(double x, double y, double z, long particleTimeMillis) { - if (compassState == CompassState.FAILED_TIMEOUT_NO_REPEATING || - compassState == CompassState.FAILED_TIMEOUT_NO_PARTICLES || - compassState == CompassState.COMPLETED) { - throw new UnsupportedOperationException("processParticle should not be called in a failed or completed state"); - } - - if (particleTimeMillis - this.whenUsedMillis > ALL_PARTICLES_MAX_MILLIS) { - // Assume we have failed if we're still trying to process particles - compassState = CompassState.FAILED_TIMEOUT_NO_REPEATING; - return; - } - - Vec3Comparable currentParticle = new Vec3Comparable(x, y, z); - if (compassState == CompassState.WAITING_FOR_FIRST_PARTICLE) { - if (currentParticle.distanceTo(new Vec3Comparable(whereUsed)) < MAX_DISTANCE_FROM_USE_TO_FIRST_PARTICLE) { - processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); - firstParticle = currentParticle; - previousParticle = currentParticle; - compassState = CompassState.COMPUTING_LAST_PARTICLE; - } - return; - } - - // State is COMPUTING_LAST_PARTICLE, keep updating the previousParticle until - // the first particle in the second sequence is seen. - if (currentParticle.distanceTo(previousParticle) <= MAX_DISTANCE_BETWEEN_PARTICLES) { - processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); - previousParticle = currentParticle; - return; - } - - if (currentParticle.distanceTo(firstParticle) > MAX_DISTANCE_BETWEEN_PARTICLES) { - return; - } - - // It's a repeating particle - processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); - lastParticle = previousParticle; - line = new Line(firstParticle, lastParticle); - compassState = CompassState.COMPLETED; - } - - public void appendCompassDiagnostics(StringBuilder diagsMessage, String compassName) { - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Compass State: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(compassState.name()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append(compassName); - diagsMessage.append(" Used Millis: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(whenUsedMillis); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append(compassName); - diagsMessage.append(" Used Position: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((whereUsed == null) ? "" : whereUsed.toString()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append(compassName); - diagsMessage.append(" All Seen Particles: \n"); - diagsMessage.append(EnumChatFormatting.WHITE); - for (ProcessedParticle particle : processedParticles) { - diagsMessage.append(particle.toString()); - diagsMessage.append("\n"); - } - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append(compassName); - diagsMessage.append(" Particle Spread: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(particleSpread()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append(compassName); - diagsMessage.append(" Compass Line: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((line == null) ? "" : line.toString()); - diagsMessage.append("\n"); - } - - static class ProcessedParticle { - Vec3Comparable coords; - long particleTimeMillis; + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Solution: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((solution == null) ? "" : solution.toString()); + diagsMessage.append("\n"); - ProcessedParticle(Vec3Comparable coords, long particleTimeMillis) { - this.coords = coords; - this.particleTimeMillis = particleTimeMillis; - } + NEUDebugLogger.log(NEUDebugFlag.WISHING, diagsMessage.toString()); - @Override - public String toString() { - return coords.toString() + " " + particleTimeMillis; - } + if (!originalDebugFlag) { + NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.remove(NEUDebugFlag.WISHING); } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java index f793baf0..6cfb8c04 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java @@ -641,42 +641,6 @@ public class Mining { @ConfigAccordionId(id = 6) public int crystalHollowNoneColor = 12; - @ConfigOption( - name = "Wishing Compass Solver", - desc = "" - ) - @ConfigEditorAccordion(id = 7) - public boolean wishingCompassSolverAccordion = false; - - @Expose - @ConfigOption( - name = "Enable Solver", - desc = "Show wishing compass target coordinates based on two samples" - ) - @ConfigAccordionId(id = 7) - @ConfigEditorBoolean - public boolean wishingCompassSolver = true; - - @Expose - @ConfigOption( - name = "Skytils Waypoints", - desc = "Automatically create Skytils waypoints for well-known targets" - ) - @ConfigAccordionId(id = 7) - @ConfigEditorBoolean - public boolean wishingCompassAutocreateKnownWaypoints = false; - - @Expose - @ConfigOption( - name = "Waypoint Type", - desc = "Skytils Waypoint name type. Skytils Built-in will be overwritten by Skytils when the waypoint is nearby." - ) - @ConfigAccordionId(id = 7) - @ConfigEditorDropdown( - values = {"NEU", "Skytils"} - ) - public int wishingCompassWaypointNameType = 0; - @Expose @ConfigOption( name = "Puzzler Solver", @@ -701,11 +665,19 @@ public class Mining { @ConfigEditorBoolean public boolean titaniumAlertMustBeVisible = false; + @Expose + @ConfigOption( + name = "Wishing Compass Solver", + desc = "Show wishing compass target coordinates based on two samples" + ) + @ConfigEditorBoolean + public boolean wishingCompassSolver = true; + @ConfigOption( name = "Custom Textures", desc = "" ) - @ConfigEditorAccordion(id = 8) + @ConfigEditorAccordion(id = 7) public boolean texturesAccordion = false; @Expose @@ -713,7 +685,7 @@ public class Mining { name = "Dwarven Mines Textures", desc = "Allows texture packs to retexture blocks in the Dwarven Mines. If you don't have a texture pack that does this, you should leave this off" ) - @ConfigAccordionId(id = 8) + @ConfigAccordionId(id = 7) @ConfigEditorBoolean public boolean dwarvenTextures = false; @Expose @@ -721,7 +693,7 @@ public class Mining { name = "Crystal Hollows Textures", desc = "Allows texture packs to retexture blocks in the Crystal Hollows. If you don't have a texture pack that does this, you should leave this off" ) - @ConfigAccordionId(id = 8) + @ConfigAccordionId(id = 7) @ConfigEditorBoolean public boolean crystalHollowTextures = false; @@ -730,7 +702,7 @@ public class Mining { name = "Replace Gemstone sounds", desc = "Replace the break sounds of crystals in the Crystal Hollows. Requires a texture pack with this feature" ) - @ConfigAccordionId(id = 8) + @ConfigAccordionId(id = 7) @ConfigEditorBoolean public boolean gemstoneSounds = false; @@ -739,7 +711,7 @@ public class Mining { name = "Replace Mithril sounds", desc = "Replace the break sounds of mithril and titanium in the Dwarven mines. Requires a texture pack with this feature" ) - @ConfigAccordionId(id = 8) + @ConfigAccordionId(id = 7) @ConfigEditorBoolean public boolean mithrilSounds = false; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java index dafbe202..48410404 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java @@ -107,6 +107,7 @@ public class Misc { @Expose @ConfigOption( + name = "Edit Enchant Colours", desc = "Change the colours of certain skyblock enchants (/neuec)" ) diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java index 2e1d0619..04fe6e6b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java @@ -49,7 +49,7 @@ public class ProfileViewer { "\u00a7eMining", "\u00a7eBingo", }, - allowRemovingElements = false + allowDeleting = false ) public List pageLayout = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7)); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java index 60d1e513..6108901c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java @@ -298,12 +298,14 @@ public class BingoPage { NotEnoughUpdates.INSTANCE.manager.hypixelApi.getHypixelApiAsync( NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, "resources/skyblock/bingo", - args - ).thenAccept(jsonObject -> { - if (jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { - bingoGoals = jsonArrayToJsonObjectList(jsonObject.get("goals").getAsJsonArray()); - currentEventId = jsonObject.get("id").getAsInt(); - } - }); + args, + jsonObject -> { + if (jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + bingoGoals = jsonArrayToJsonObjectList(jsonObject.get("goals").getAsJsonArray()); + currentEventId = jsonObject.get("id").getAsInt(); + } + }, + () -> {} + ); } } 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 898f9e11..11c10ea0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -67,6 +67,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.TimeZone; import java.util.TreeMap; @@ -1956,6 +1957,12 @@ public class GuiProfileViewer extends GuiScreen { } } + NBTTagCompound nbt = new NBTTagCompound(); //Adding NBT Data for Custom Resource Packs + NBTTagCompound display = new NBTTagCompound(); + display.setString("Name", skillName); + nbt.setTag("display", display); + stack.setTagCompound(nbt); + GL11.glTranslatef((x), (y - 6f), 0); GL11.glScalef(0.7f, 0.7f, 1); Utils.drawItemStackLinear(stack, 0, 0); @@ -1964,11 +1971,32 @@ public class GuiProfileViewer extends GuiScreen { } private ItemStack getQuestionmarkSkull() { - return Utils.createSkull( - EnumChatFormatting.RED + "Unknown Pet", - "Unknown Pet", - "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmM4ZWExZjUxZjI1M2ZmNTE0MmNhMTFhZTQ1MTkzYTRhZDhjM2FiNWU5YzZlZWM4YmE3YTRmY2I3YmFjNDAifX19" - ); + String textureLink = "bc8ea1f51f253ff5142ca11ae45193a4ad8c3ab5e9c6eec8ba7a4fcb7bac40"; + + String b64Decoded = + "{\"textures\":{\"SKIN\":{\"url\":\"http://textures.minecraft.net/texture/" + textureLink + "\"}}}"; + String b64Encoded = new String(Base64.getEncoder().encode(b64Decoded.getBytes())); + + ItemStack stack = new ItemStack(Items.skull, 1, 3); + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagCompound skullOwner = new NBTTagCompound(); + NBTTagCompound properties = new NBTTagCompound(); + NBTTagList textures = new NBTTagList(); + NBTTagCompound textures_0 = new NBTTagCompound(); + + String uuid = UUID.nameUUIDFromBytes(b64Encoded.getBytes()).toString(); + skullOwner.setString("Id", uuid); + skullOwner.setString("Name", uuid); + + textures_0.setString("Value", b64Encoded); + textures.appendTag(textures_0); + + properties.setTag("textures", textures); + skullOwner.setTag("Properties", properties); + nbt.setTag("SkullOwner", skullOwner); + stack.setTagCompound(nbt); + stack.setStackDisplayName(EnumChatFormatting.RED + "Unknown Pet"); + return stack; } private void drawPetsPage(int mouseX, int mouseY, float partialTicks) { @@ -5303,24 +5331,37 @@ public class GuiProfileViewer extends GuiScreen { } public enum ProfileViewerPage { - LOADING(-1, null), - INVALID_NAME(-1, null), - NO_SKYBLOCK(-1, null), - BASIC(0, new ItemStack(Items.paper)), - DUNGEON(1, new ItemStack(Item.getItemFromBlock(Blocks.deadbush))), - EXTRA(2, new ItemStack(Items.book)), - INVENTORIES(3, new ItemStack(Item.getItemFromBlock(Blocks.ender_chest))), - COLLECTIONS(4, new ItemStack(Items.painting)), - PETS(5, new ItemStack(Items.bone)), - MINING(6, new ItemStack(Items.iron_pickaxe)), - BINGO(7, new ItemStack(Items.filled_map)); + LOADING(), + INVALID_NAME(), + NO_SKYBLOCK(), + BASIC(0, Items.paper, "Your Skills"), + DUNGEON(1, Item.getItemFromBlock(Blocks.deadbush), "Dungeoneering"), + EXTRA(2, Items.book, "Profile Stats"), + INVENTORIES(3, Item.getItemFromBlock(Blocks.ender_chest), "Storage"), + COLLECTIONS(4, Items.painting, "Collections"), + PETS(5, Items.bone, "Pets"), + MINING(6, Items.iron_pickaxe, "Heart of the Mountain"), + BINGO(7, Items.filled_map, "Bingo"); public final ItemStack stack; public final int id; - ProfileViewerPage(int id, ItemStack stack) { + ProfileViewerPage() { + this(-1, null, null); + } + + ProfileViewerPage(int id, Item item, String name) { this.id = id; - this.stack = stack; + if (item == null) { + stack = null; + } else { + stack = new ItemStack(item); + NBTTagCompound nbt = new NBTTagCompound(); //Adding NBT Data for Custom Resource Packs + NBTTagCompound display = new NBTTagCompound(); + display.setString("Name", name); + nbt.setTag("display", display); + stack.setTagCompound(nbt); + } } public static ProfileViewerPage getById(int id) { @@ -5331,6 +5372,11 @@ public class GuiProfileViewer extends GuiScreen { } return null; } + + public Optional getItem() { + return Optional.ofNullable(stack); + } + } public static class PetLevel { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java index 827a3e97..d662a872 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java @@ -13,8 +13,6 @@ import java.util.function.Consumer; public class NEUDebugLogger { private static final Minecraft mc = Minecraft.getMinecraft(); public static Consumer logMethod = NEUDebugLogger::chatLogger; - // Used to prevent accessing NEUConfig in unit tests - public static boolean allFlagsEnabled = false; private static void chatLogger(String message) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU DEBUG] " + message)); @@ -25,13 +23,7 @@ public class NEUDebugLogger { } public static void log(NEUDebugFlag flag, String message) { - if (logMethod != null && (allFlagsEnabled || isFlagEnabled(flag))) { - logAlways(message); - } - } - - public static void logAlways(String message) { - if (logMethod != null) { + if (logMethod != null && isFlagEnabled(flag)) { logMethod.accept(message); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java index a557eb12..5b7bd055 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java @@ -18,8 +18,6 @@ import net.minecraft.scoreboard.Score; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.GuiOpenEvent; @@ -59,7 +57,7 @@ public class SBInfo { public String slayer = ""; public boolean stranded = false; - public String mode = null; + public String mode = ""; public Date currentTimeDate = null; @@ -122,16 +120,6 @@ public class SBInfo { } } - public boolean checkForSkyblockLocation() { - if (!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() || getLocation() == null) { - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] This command is not available outside SkyBlock")); - return false; - } - - return true; - } - private static final Pattern PROFILE_PATTERN = Pattern.compile("(?(♲ Ironman)|(☀ Stranded)|()) *Profile: (?[^ ]+)"); diff --git a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java deleted file mode 100644 index c0b451e3..00000000 --- a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java +++ /dev/null @@ -1,193 +0,0 @@ -package io.github.moulberry.notenoughupdates.core.util; - -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class Vec3ComparableTest { - @Test - void equals_false_when_null() { - // Arrange - Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - boolean areEqual = vec3c.equals(null); - - // Assert - assertFalse(areEqual); - } - - @Test - void equals_true_when_same_object() { - // Arrange - Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - boolean areEqual = vec3c.equals(vec3c); - - // Assert - assertTrue(areEqual); - } - - @Test - void equals_true_when_same_value() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - boolean areEqual = vec3c1.equals(vec3c2); - - // Assert - assertTrue(areEqual); - } - - @Test - void equals_false_when_vec3_equals() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3 vec3c2 = new Vec3(1.0, 2.0, 3.0); - - // Act - boolean areEqual = vec3c1.equals(vec3c2); - - // Assert - assertFalse(areEqual); - } - - @Test - void equals_false_when_different_object_type() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - BlockPos blockPos = new BlockPos(1.0, 2.0, 3.0); - - // Act - boolean areEqual = vec3c1.equals(blockPos); - - // Assert - assertFalse(areEqual); - } - - @Test - void equals_false_when_different_value() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); - - // Act - boolean areEqual = vec3c1.equals(vec3c2); - - // Assert - assertFalse(areEqual); - } - - @Test - void hashCode_same_when_same_value() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - double vec3c1Hash = vec3c1.hashCode(); - double vec3c2Hash = vec3c2.hashCode(); - - // Assert - assertEquals(vec3c1Hash, vec3c2Hash); - } - - @Test - void hashCode_different_when_different_value() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); - - // Act - double vec3c1Hash = vec3c1.hashCode(); - double vec3c2Hash = vec3c2.hashCode(); - - // Assert - assertNotEquals(vec3c1Hash, vec3c2Hash); - } - - @Test - void compareTo_zero_when_equal() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - int result = vec3c1.compareTo(vec3c2); - - // Assert - assertEquals(0, result); - } - - @Test - void compareTo_negative_when_lower() { - // Arrange - Vec3Comparable vec3c1 = new Vec3Comparable(0.0, 2.0, 3.0); - Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - int result = vec3c1.compareTo(vec3c2); - - // Assert - assertTrue(result < 0); - } - - @Test - void compareTo_positive_when_x_y_or_z_is_higher() { - // Arrange - Vec3Comparable vec3c1x = new Vec3Comparable(2.0, 2.0, 3.0); - Vec3Comparable vec3c2x = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c1y = new Vec3Comparable(1.0, 3.0, 3.0); - Vec3Comparable vec3c2y = new Vec3Comparable(1.0, 2.0, 3.0); - Vec3Comparable vec3c1z = new Vec3Comparable(1.0, 2.0, 4.0); - Vec3Comparable vec3c2z = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act - int resultX = vec3c1x.compareTo(vec3c2x); - int resultY = vec3c1y.compareTo(vec3c2y); - int resultZ = vec3c1z.compareTo(vec3c2z); - - // Assert - assertTrue(resultX > 0); - assertTrue(resultY > 0); - assertTrue(resultZ > 0); - } - - @Test - void compareTo_throws_on_null() { - // Arrange - Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); - - // Act & Assert - Assertions.assertThrows(NullPointerException.class, () -> { - vec3c.compareTo(null); - }); - } - - @Test - void signumEquals_is_true_when_all_signums_match() { - Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); - Vec3 second = new Vec3(-1.0, 1.0, 0); - Assertions.assertTrue(first.signumEquals(second)); - } - - @Test - void signumEquals_is_false_when_any_signum_differs() { - Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); - Vec3 second = new Vec3(-1.0, 1.0, 1.0); - Vec3 third = new Vec3(-1.0, -1.0, 0); - Vec3 fourth = new Vec3(1.0, 1.0, 1.0); - Assertions.assertFalse(first.signumEquals(second)); - Assertions.assertFalse(first.signumEquals(third)); - Assertions.assertFalse(first.signumEquals(fourth)); - } -} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java deleted file mode 100644 index 58233410..00000000 --- a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java +++ /dev/null @@ -1,204 +0,0 @@ -package io.github.moulberry.notenoughupdates.miscfeatures; - -import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; -import io.github.moulberry.notenoughupdates.miscfeatures.CrystalMetalDetectorSolver.SolutionState; -import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; -import net.minecraft.util.BlockPos; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Assertions; - -import java.util.ArrayList; - -class CrystalMetalDetectorSolverTest { - class Location { - double distance; - Vec3Comparable playerPosition; - SolutionState expectedState; - boolean centerKnown; - - public Location(double distance, - Vec3Comparable playerPosition, - SolutionState expectedState, - boolean centerKnown) { - this.distance = distance; - this.playerPosition = playerPosition; - this.expectedState = expectedState; - this.centerKnown = centerKnown; - } - } - - class Solution { - ArrayList locations = new ArrayList<>(); - BlockPos center = BlockPos.ORIGIN; - BlockPos expectedSolution = BlockPos.ORIGIN; - } - - @BeforeEach - void setUp() { - CrystalMetalDetectorSolver.initWorld(); - CrystalMetalDetectorSolver.treasureAllowedPredicate = blockPos -> true; - NEUDebugLogger.logMethod = CrystalMetalDetectorSolverTest::neuDebugLog; - NEUDebugLogger.allFlagsEnabled = true; - } - - private void findPossibleSolutionsTwice(Location loc, boolean centerNewlyDiscovered) { - // Each location has to be received twice to be valid - CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, centerNewlyDiscovered); - CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, false); - } - - private void checkSolution(Solution solution) { - boolean centerSet = false; - int index = 0; - for (Location loc : solution.locations) { - if (loc.centerKnown && !centerSet && !solution.center.equals(BlockPos.ORIGIN)) { - CrystalMetalDetectorSolver.setMinesCenter(solution.center); - centerSet = true; - findPossibleSolutionsTwice(loc, true); - } else { - findPossibleSolutionsTwice(loc, false); - } - Assertions.assertEquals(loc.expectedState, - CrystalMetalDetectorSolver.currentState, - "Location index " + index); - index++; - } - - Assertions.assertEquals(solution.expectedSolution, CrystalMetalDetectorSolver.getSolution()); - } - - @Test - void findPossibleSolutions_single_location_sample_is_ignored() { - Location location = new Location(37.3, - new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), - SolutionState.MULTIPLE, - false); - - CrystalMetalDetectorSolver.findPossibleSolutions(location.distance, location.playerPosition, false); - Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, - "Previous state"); - Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.currentState, - "Current state"); - } - - @Test - void findPossibleSolutions_currentState_becomes_previousState() { - Location location = new Location(37.3, - new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), - SolutionState.MULTIPLE, - false); - - findPossibleSolutionsTwice(location, false); - Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, - "Previous state"); - Assertions.assertEquals(location.expectedState, CrystalMetalDetectorSolver.currentState, - "Current state"); - } - - @Test - void findPossibleSolutions_state_is_invalid_when_solution_and_distance_mismatch() { - Solution solution = new Solution(); - solution.center = new BlockPos(736, 88, 547); - solution.expectedSolution = new BlockPos(722, 67, 590); - solution.locations.add(new Location(67.5, - new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), - SolutionState.FOUND_KNOWN, - true)); - // slightly different player position with invalid distance - solution.locations.add(new Location(4.0, - new Vec3Comparable(757.8235166144441, 69.0, 532.8037800566217), - SolutionState.INVALID, - true)); - checkSolution(solution); - } - - @Test - void findPossibleSolutions_state_is_failed_when_second_location_eliminates_all_blocks() { - Solution solution = new Solution(); - solution.center = new BlockPos(736, 88, 547); - solution.locations.add(new Location(29.4, - new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), - SolutionState.MULTIPLE_KNOWN, - true)); - solution.locations.add(new Location(4.0, // actual distance should be 38.2 - new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), - SolutionState.FAILED, - true)); - checkSolution(solution); - } - - @Test - void findPossibleSolutions_state_is_found_known_when_center_found_after_location() { - Solution solution = new Solution(); - solution.center = new BlockPos(736, 88, 547); - solution.locations.add(new Location(67.5, - new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), - SolutionState.MULTIPLE, - false)); - checkSolution(solution); - - solution.locations.get(0).centerKnown = true; - solution.locations.get(0).expectedState = SolutionState.FOUND_KNOWN; - solution.expectedSolution = new BlockPos(722, 67, 590); - checkSolution(solution); - } - - @Test - void findPossibleSolutions_state_is_found_when_single_known_location() { - Solution solution = new Solution(); - solution.center = new BlockPos(736, 88, 547); - solution.expectedSolution = new BlockPos(722, 67, 590); - solution.locations.add(new Location(67.5, - new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), - SolutionState.FOUND_KNOWN, - true)); - checkSolution(solution); - } - - @Test - void findPossibleSolutions_states_are_correct_using_multiple_locations_with_unknown_center() { - Solution solution = new Solution(); - solution.locations.add(new Location(37.3, - new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), - SolutionState.MULTIPLE, - false)); - solution.locations.add(new Location(34.8, - new Vec3Comparable(782.6999999880791, 71.0, 508.69999998807907), - SolutionState.FOUND, - false)); - solution.expectedSolution = new BlockPos(758, 67, 533); - - checkSolution(solution); - } - - @Test - void findPossibleSolutions_states_are_correct_when_multiple_known_locations_found() { - Solution solution = new Solution(); - - // First, validate that the solution doesn't work without the center - solution.locations.add(new Location(29.4, - new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), - SolutionState.MULTIPLE, - false)); - solution.locations.add(new Location(38.2, - new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), - SolutionState.MULTIPLE, - false)); - checkSolution(solution); - - // Now validate that the solution works with the center - CrystalMetalDetectorSolver.resetSolution(false); - solution.locations.get(0).expectedState = SolutionState.MULTIPLE_KNOWN; - solution.locations.get(0).centerKnown = true; - solution.locations.get(1).expectedState = SolutionState.FOUND_KNOWN; - solution.locations.get(1).centerKnown = true; - solution.expectedSolution = new BlockPos(748, 66, 578); - solution.center = new BlockPos(736, 88, 547); - checkSolution(solution); - } - - private static void neuDebugLog(String message) { - System.out.println(message); - } -} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java deleted file mode 100644 index ed39a505..00000000 --- a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java +++ /dev/null @@ -1,1206 +0,0 @@ -package io.github.moulberry.notenoughupdates.miscfeatures; - -import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; -import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.CompassTarget; -import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.HandleCompassResult; -import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.SolverState; -import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; -import net.minecraft.util.Vec3i; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.EnumSet; - -import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.*; - -class CrystalWishingCompassSolverTest { - private static final CrystalWishingCompassSolver solver = getInstance(); - long systemTimeMillis; - private final long DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE = 500L; - - private final CompassUse minesOfDivanCompassUse1 = new CompassUse( - 1647528732979L, - new BlockPos(754, 137, 239), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137), - new ParticleSpawn(new Vec3Comparable(754.315735, 138.444351, 239.690521), 45), - new ParticleSpawn(new Vec3Comparable(754.272278, 138.352051, 240.180008), 51), - new ParticleSpawn(new Vec3Comparable(754.228760, 138.259750, 240.669479), 49), - new ParticleSpawn(new Vec3Comparable(754.185303, 138.167435, 241.158966), 57), - new ParticleSpawn(new Vec3Comparable(754.141846, 138.075134, 241.648438), 50), - new ParticleSpawn(new Vec3Comparable(754.098328, 137.982819, 242.137909), 51), - new ParticleSpawn(new Vec3Comparable(754.054871, 137.890518, 242.627396), 57), - new ParticleSpawn(new Vec3Comparable(754.011353, 137.798203, 243.116867), 44), - new ParticleSpawn(new Vec3Comparable(753.967896, 137.705887, 243.606354), 59), - new ParticleSpawn(new Vec3Comparable(753.924438, 137.613586, 244.095825), 35), - new ParticleSpawn(new Vec3Comparable(753.880920, 137.521271, 244.585297), 48), - new ParticleSpawn(new Vec3Comparable(753.837463, 137.428970, 245.074783), 70), - new ParticleSpawn(new Vec3Comparable(753.793945, 137.336655, 245.564255), 33), - new ParticleSpawn(new Vec3Comparable(753.750488, 137.244354, 246.053741), 55), - new ParticleSpawn(new Vec3Comparable(753.707031, 137.152039, 246.543213), 42), - new ParticleSpawn(new Vec3Comparable(753.663513, 137.059738, 247.032700), 56), - new ParticleSpawn(new Vec3Comparable(753.620056, 136.967422, 247.522171), 48), - new ParticleSpawn(new Vec3Comparable(753.576538, 136.875122, 248.011642), 56), - new ParticleSpawn(new Vec3Comparable(754.333618, 138.527710, 239.197800), 55) - )), - HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); - - private final CompassUse minesOfDivanCompassUse2 = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - new BlockPos(760, 134, 266), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(759.686951, 135.524994, 266.190704), 129), - new ParticleSpawn(new Vec3Comparable(759.625183, 135.427887, 266.677277), 69), - new ParticleSpawn(new Vec3Comparable(759.561707, 135.330704, 267.163635), 31), - new ParticleSpawn(new Vec3Comparable(759.498230, 135.233536, 267.649963), 115), - new ParticleSpawn(new Vec3Comparable(759.434753, 135.136368, 268.136322), 0), - new ParticleSpawn(new Vec3Comparable(759.371277, 135.039200, 268.622650), 46), - new ParticleSpawn(new Vec3Comparable(759.307800, 134.942017, 269.109009), 49), - new ParticleSpawn(new Vec3Comparable(759.244324, 134.844849, 269.595337), 59), - new ParticleSpawn(new Vec3Comparable(759.180847, 134.747681, 270.081696), 45), - new ParticleSpawn(new Vec3Comparable(759.117371, 134.650513, 270.568024), 39), - new ParticleSpawn(new Vec3Comparable(759.053894, 134.553329, 271.054352), 67), - new ParticleSpawn(new Vec3Comparable(758.990356, 134.456161, 271.540710), 49), - new ParticleSpawn(new Vec3Comparable(758.926880, 134.358994, 272.027039), 32), - new ParticleSpawn(new Vec3Comparable(758.863403, 134.261826, 272.513397), 61), - new ParticleSpawn(new Vec3Comparable(758.799927, 134.164642, 272.999725), 44), - new ParticleSpawn(new Vec3Comparable(758.736450, 134.067474, 273.486084), 48), - new ParticleSpawn(new Vec3Comparable(758.672974, 133.970306, 273.972412), 57), - new ParticleSpawn(new Vec3Comparable(758.609497, 133.873138, 274.458740), 55), - new ParticleSpawn(new Vec3Comparable(758.546021, 133.775955, 274.945099), 59), - new ParticleSpawn(new Vec3Comparable(758.482544, 133.678787, 275.431427), 38), - new ParticleSpawn(new Vec3Comparable(759.636658, 135.522827, 266.186371), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.SOLVED); - - Vec3i minesOfDivanSolution = new Vec3i(735, 98, 451); - - private final CompassUse goblinHoldoutCompassUse1 = new CompassUse( - 1647776326763L, - new BlockPos(454, 87, 776), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(454.171722, 88.616852, 775.807190), 188), - new ParticleSpawn(new Vec3Comparable(454.010315, 88.613464, 775.333984), 44), - new ParticleSpawn(new Vec3Comparable(453.849243, 88.610069, 774.860657), 61), - new ParticleSpawn(new Vec3Comparable(453.688141, 88.606674, 774.387329), 51), - new ParticleSpawn(new Vec3Comparable(453.527069, 88.603271, 773.914001), 40), - new ParticleSpawn(new Vec3Comparable(453.365997, 88.599876, 773.440674), 57), - new ParticleSpawn(new Vec3Comparable(453.204926, 88.596481, 772.967346), 45), - new ParticleSpawn(new Vec3Comparable(453.043854, 88.593086, 772.494019), 49), - new ParticleSpawn(new Vec3Comparable(452.882782, 88.589691, 772.020691), 46), - new ParticleSpawn(new Vec3Comparable(452.721710, 88.586288, 771.547302), 65), - new ParticleSpawn(new Vec3Comparable(452.560638, 88.582893, 771.073975), 43), - new ParticleSpawn(new Vec3Comparable(452.399567, 88.579498, 770.600647), 50), - new ParticleSpawn(new Vec3Comparable(452.238495, 88.576103, 770.127319), 48), - new ParticleSpawn(new Vec3Comparable(452.077423, 88.572701, 769.653992), 47), - new ParticleSpawn(new Vec3Comparable(451.916351, 88.569305, 769.180664), 60), - new ParticleSpawn(new Vec3Comparable(451.755280, 88.565910, 768.707336), 40), - new ParticleSpawn(new Vec3Comparable(451.594208, 88.562515, 768.234009), 69), - new ParticleSpawn(new Vec3Comparable(451.433136, 88.559120, 767.760681), 40), - new ParticleSpawn(new Vec3Comparable(451.272064, 88.555717, 767.287354), 42), - new ParticleSpawn(new Vec3Comparable(454.183441, 88.616600, 775.803040), 54) - )), - HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); - - private final CompassUse goblinHoldoutCompassUse2 = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - new BlockPos(439, 85, 777), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(439.068848, 86.624870, 776.043701), 136), - new ParticleSpawn(new Vec3Comparable(438.936066, 86.625786, 775.561646), 46), - new ParticleSpawn(new Vec3Comparable(438.804352, 86.626595, 775.079346), 65), - new ParticleSpawn(new Vec3Comparable(438.672699, 86.627396, 774.596985), 40), - new ParticleSpawn(new Vec3Comparable(438.541016, 86.628197, 774.114624), 51), - new ParticleSpawn(new Vec3Comparable(438.409332, 86.628998, 773.632263), 50), - new ParticleSpawn(new Vec3Comparable(438.277679, 86.629799, 773.149902), 50), - new ParticleSpawn(new Vec3Comparable(438.145996, 86.630608, 772.667603), 56), - new ParticleSpawn(new Vec3Comparable(438.014343, 86.631409, 772.185242), 40), - new ParticleSpawn(new Vec3Comparable(437.882660, 86.632210, 771.702881), 65), - new ParticleSpawn(new Vec3Comparable(437.751007, 86.633011, 771.220520), 45), - new ParticleSpawn(new Vec3Comparable(437.619324, 86.633812, 770.738159), 42), - new ParticleSpawn(new Vec3Comparable(437.487671, 86.634613, 770.255798), 60), - new ParticleSpawn(new Vec3Comparable(437.355988, 86.635414, 769.773499), 51), - new ParticleSpawn(new Vec3Comparable(437.224335, 86.636215, 769.291138), 44), - new ParticleSpawn(new Vec3Comparable(437.092651, 86.637024, 768.808777), 56), - new ParticleSpawn(new Vec3Comparable(436.960999, 86.637825, 768.326416), 56), - new ParticleSpawn(new Vec3Comparable(436.829315, 86.638626, 767.844055), 40), - new ParticleSpawn(new Vec3Comparable(436.697632, 86.639427, 767.361694), 50), - new ParticleSpawn(new Vec3Comparable(436.565979, 86.640228, 766.879395), 46), - new ParticleSpawn(new Vec3Comparable(439.108551, 86.620811, 776.031067), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.SOLVED); - - Vec3i goblinHoldoutKingSolution = new Vec3i(377, 87, 550); - Vec3i goblinHoldoutQueenSolution = new Vec3i(322, 139, 769); - - private final CompassUse precursorCityCompassUse1 = new CompassUse( - 1647744920365L, - new BlockPos(570, 120, 565), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(570.428955, 121.630745, 565.674500), 192), - new ParticleSpawn(new Vec3Comparable(570.572998, 121.642563, 566.153137), 52), - new ParticleSpawn(new Vec3Comparable(570.714233, 121.654442, 566.632629), 45), - new ParticleSpawn(new Vec3Comparable(570.855286, 121.666321, 567.112183), 51), - new ParticleSpawn(new Vec3Comparable(570.996338, 121.678200, 567.591736), 0), - new ParticleSpawn(new Vec3Comparable(571.137390, 121.690079, 568.071289), 111), - new ParticleSpawn(new Vec3Comparable(571.278442, 121.701958, 568.550781), 38), - new ParticleSpawn(new Vec3Comparable(571.419495, 121.713844, 569.030334), 51), - new ParticleSpawn(new Vec3Comparable(571.560547, 121.725723, 569.509888), 49), - new ParticleSpawn(new Vec3Comparable(571.701599, 121.737602, 569.989441), 0), - new ParticleSpawn(new Vec3Comparable(571.842651, 121.749481, 570.468994), 101), - new ParticleSpawn(new Vec3Comparable(571.983704, 121.761360, 570.948547), 53), - new ParticleSpawn(new Vec3Comparable(572.124756, 121.773239, 571.428101), 47), - new ParticleSpawn(new Vec3Comparable(572.265747, 121.785118, 571.907654), 49), - new ParticleSpawn(new Vec3Comparable(572.406799, 121.796997, 572.387207), 49), - new ParticleSpawn(new Vec3Comparable(572.547852, 121.808876, 572.866699), 51), - new ParticleSpawn(new Vec3Comparable(572.688904, 121.820755, 573.346252), 57), - new ParticleSpawn(new Vec3Comparable(572.829956, 121.832634, 573.825806), 42), - new ParticleSpawn(new Vec3Comparable(572.971008, 121.844513, 574.305359), 50), - new ParticleSpawn(new Vec3Comparable(573.112061, 121.856392, 574.784912), 52), - new ParticleSpawn(new Vec3Comparable(570.372192, 121.631874, 565.694946), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); - - private final CompassUse precursorCityCompassUse2 = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - new BlockPos(591, 136, 579), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(590.847961, 137.589584, 579.776672), 192), - new ParticleSpawn(new Vec3Comparable(590.918945, 137.528259, 580.267761), 50), - new ParticleSpawn(new Vec3Comparable(590.985229, 137.465118, 580.759338), 56), - new ParticleSpawn(new Vec3Comparable(591.051147, 137.401855, 581.250916), 47), - new ParticleSpawn(new Vec3Comparable(591.117126, 137.338593, 581.742493), 47), - new ParticleSpawn(new Vec3Comparable(591.183044, 137.275330, 582.234070), 49), - new ParticleSpawn(new Vec3Comparable(591.249023, 137.212067, 582.725647), 60), - new ParticleSpawn(new Vec3Comparable(591.314941, 137.148804, 583.217224), 55), - new ParticleSpawn(new Vec3Comparable(591.380920, 137.085541, 583.708801), 47), - new ParticleSpawn(new Vec3Comparable(591.446838, 137.022263, 584.200378), 50), - new ParticleSpawn(new Vec3Comparable(591.512817, 136.959000, 584.691956), 39), - new ParticleSpawn(new Vec3Comparable(591.578735, 136.895737, 585.183533), 53), - new ParticleSpawn(new Vec3Comparable(591.644714, 136.832474, 585.675110), 53), - new ParticleSpawn(new Vec3Comparable(591.710632, 136.769211, 586.166687), 45), - new ParticleSpawn(new Vec3Comparable(591.776611, 136.705948, 586.658264), 79), - new ParticleSpawn(new Vec3Comparable(591.842529, 136.642685, 587.149841), 20), - new ParticleSpawn(new Vec3Comparable(591.908508, 136.579407, 587.641418), 62), - new ParticleSpawn(new Vec3Comparable(591.974426, 136.516144, 588.132996), 48), - new ParticleSpawn(new Vec3Comparable(592.040344, 136.452881, 588.624573), 40), - new ParticleSpawn(new Vec3Comparable(592.106323, 136.389618, 589.116150), 51), - new ParticleSpawn(new Vec3Comparable(590.766357, 137.556885, 579.791565), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.SOLVED); - - Vec3i precursorCitySolution = new Vec3i(604, 124, 681); - - private final CompassUse jungleCompassUse1 = new CompassUse( - 1647744980313L, - new BlockPos(454, 122, 459), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(453.954895, 122.958122, 458.687866), 141), - new ParticleSpawn(new Vec3Comparable(453.515991, 122.760010, 458.553314), 59), - new ParticleSpawn(new Vec3Comparable(453.078156, 122.560112, 458.417877), 41), - new ParticleSpawn(new Vec3Comparable(452.640381, 122.360123, 458.282349), 50), - new ParticleSpawn(new Vec3Comparable(452.202606, 122.160133, 458.146851), 66), - new ParticleSpawn(new Vec3Comparable(451.764832, 121.960136, 458.011353), 35), - new ParticleSpawn(new Vec3Comparable(451.327057, 121.760147, 457.875854), 49), - new ParticleSpawn(new Vec3Comparable(450.889313, 121.560150, 457.740356), 50), - new ParticleSpawn(new Vec3Comparable(450.451538, 121.360161, 457.604858), 49), - new ParticleSpawn(new Vec3Comparable(450.013763, 121.160172, 457.469330), 51), - new ParticleSpawn(new Vec3Comparable(449.575989, 120.960175, 457.333832), 59), - new ParticleSpawn(new Vec3Comparable(449.138214, 120.760185, 457.198334), 41), - new ParticleSpawn(new Vec3Comparable(448.700439, 120.560196, 457.062836), 55), - new ParticleSpawn(new Vec3Comparable(448.262695, 120.360199, 456.927338), 50), - new ParticleSpawn(new Vec3Comparable(447.824921, 120.160210, 456.791840), 49), - new ParticleSpawn(new Vec3Comparable(447.387146, 119.960213, 456.656311), 53), - new ParticleSpawn(new Vec3Comparable(446.949371, 119.760223, 456.520813), 43), - new ParticleSpawn(new Vec3Comparable(446.511597, 119.560234, 456.385315), 51), - new ParticleSpawn(new Vec3Comparable(446.073853, 119.360237, 456.249817), 49), - new ParticleSpawn(new Vec3Comparable(445.636078, 119.160248, 456.114319), 56), - new ParticleSpawn(new Vec3Comparable(453.975647, 122.920158, 458.668488), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); - - private final CompassUse jungleCompassUse2 = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - new BlockPos(438, 126, 468), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(437.701721, 127.395279, 467.455048), 139), - new ParticleSpawn(new Vec3Comparable(437.297852, 127.161415, 467.275604), 35), - new ParticleSpawn(new Vec3Comparable(436.895813, 126.927208, 467.092529), 68), - new ParticleSpawn(new Vec3Comparable(436.493896, 126.692986, 466.909241), 41), - new ParticleSpawn(new Vec3Comparable(436.091980, 126.458763, 466.725952), 54), - new ParticleSpawn(new Vec3Comparable(435.690033, 126.224533, 466.542664), 39), - new ParticleSpawn(new Vec3Comparable(435.288116, 125.990311, 466.359375), 52), - new ParticleSpawn(new Vec3Comparable(434.886200, 125.756088, 466.176086), 66), - new ParticleSpawn(new Vec3Comparable(434.484283, 125.521866, 465.992767), 40), - new ParticleSpawn(new Vec3Comparable(434.082367, 125.287636, 465.809479), 41), - new ParticleSpawn(new Vec3Comparable(433.680420, 125.053413, 465.626190), 50), - new ParticleSpawn(new Vec3Comparable(433.278503, 124.819191, 465.442902), 59), - new ParticleSpawn(new Vec3Comparable(432.876587, 124.584969, 465.259613), 54), - new ParticleSpawn(new Vec3Comparable(432.474670, 124.350746, 465.076294), 38), - new ParticleSpawn(new Vec3Comparable(432.072723, 124.116516, 464.893005), 63), - new ParticleSpawn(new Vec3Comparable(431.670807, 123.882294, 464.709717), 36), - new ParticleSpawn(new Vec3Comparable(431.268890, 123.648071, 464.526428), 64), - new ParticleSpawn(new Vec3Comparable(430.866974, 123.413849, 464.343140), 48), - new ParticleSpawn(new Vec3Comparable(430.465057, 123.179619, 464.159821), 53), - new ParticleSpawn(new Vec3Comparable(430.063110, 122.945396, 463.976532), 46), - new ParticleSpawn(new Vec3Comparable(437.732666, 127.385803, 467.381592), 1) - )), - HandleCompassResult.SUCCESS, - SolverState.SOLVED); - - Vec3i jungleSolution = new Vec3i(343, 72, 424); - Vec3i jungleSolutionTempleDoor = new Vec3i( - jungleSolution.getX() - 57, - jungleSolution.getY() + 36, - jungleSolution.getZ() -21); - - private final CompassUse magmaCompassUse1 = new CompassUse( - 1647745029814L, - new BlockPos(462, 58, 550), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(462.226898, 59.614380, 550.032654), 160), - new ParticleSpawn(new Vec3Comparable(462.693848, 59.609089, 549.853943), 47), - new ParticleSpawn(new Vec3Comparable(463.160706, 59.603809, 549.674988), 48), - new ParticleSpawn(new Vec3Comparable(463.627533, 59.598526, 549.496033), 136), - new ParticleSpawn(new Vec3Comparable(464.094391, 59.593246, 549.317017), 0), - new ParticleSpawn(new Vec3Comparable(464.561218, 59.587963, 549.138062), 0), - new ParticleSpawn(new Vec3Comparable(465.028076, 59.582684, 548.959106), 53), - new ParticleSpawn(new Vec3Comparable(465.494904, 59.577400, 548.780090), 48), - new ParticleSpawn(new Vec3Comparable(465.961761, 59.572117, 548.601135), 55), - new ParticleSpawn(new Vec3Comparable(466.428589, 59.566837, 548.422180), 47), - new ParticleSpawn(new Vec3Comparable(466.895416, 59.561554, 548.243164), 46), - new ParticleSpawn(new Vec3Comparable(467.362274, 59.556274, 548.064209), 53), - new ParticleSpawn(new Vec3Comparable(467.829102, 59.550991, 547.885254), 50), - new ParticleSpawn(new Vec3Comparable(468.295959, 59.545712, 547.706238), 54), - new ParticleSpawn(new Vec3Comparable(468.762787, 59.540428, 547.527283), 52), - new ParticleSpawn(new Vec3Comparable(469.229645, 59.535145, 547.348328), 105), - new ParticleSpawn(new Vec3Comparable(469.696472, 59.529865, 547.169312), 1), - new ParticleSpawn(new Vec3Comparable(470.163300, 59.524582, 546.990356), 51), - new ParticleSpawn(new Vec3Comparable(470.630157, 59.519302, 546.811401), 40), - new ParticleSpawn(new Vec3Comparable(471.096985, 59.514019, 546.632385), 49), - new ParticleSpawn(new Vec3Comparable(462.221954, 59.614719, 550.019165), 0) - )), - HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); - - private final CompassUse magmaCompassUse2 = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - new BlockPos(449, 53, 556), - new ArrayList<>(Arrays.asList( - new ParticleSpawn(new Vec3Comparable(449.120911, 54.624340, 556.108948), 204), - new ParticleSpawn(new Vec3Comparable(449.587433, 54.627399, 555.929138), 102), - new ParticleSpawn(new Vec3Comparable(450.053741, 54.630432, 555.748657), 0), - new ParticleSpawn(new Vec3Comparable(450.520020, 54.633465, 555.568237), 62), - new ParticleSpawn(new Vec3Comparable(450.986298, 54.636497, 555.387756), 38), - new ParticleSpawn(new Vec3Comparable(451.452606, 54.639530, 555.207275), 48), - new ParticleSpawn(new Vec3Comparable(451.918884, 54.642563, 555.026794), 63), - new ParticleSpawn(new Vec3Comparable(452.385162, 54.645596, 554.846375), 52), - new ParticleSpawn(new Vec3Comparable(452.851471, 54.648628, 554.665894), 35), - new ParticleSpawn(new Vec3Comparable(453.317749, 54.651661, 554.485413), 53), - new ParticleSpawn(new Vec3Comparable(453.784027, 54.654694, 554.304993), 54), - new ParticleSpawn(new Vec3Comparable(454.250305, 54.657726, 554.124512), 50), - new ParticleSpawn(new Vec3Comparable(454.716614, 54.660759, 553.944031), 55), - new ParticleSpawn(new Vec3Comparable(455.182892, 54.663792, 553.763550), 49), - new ParticleSpawn(new Vec3Comparable(455.649170, 54.666824, 553.583130), 41), - new ParticleSpawn(new Vec3Comparable(456.115479, 54.669857, 553.402649), 48), - new ParticleSpawn(new Vec3Comparable(456.581757, 54.672890, 553.222168), 54), - new ParticleSpawn(new Vec3Comparable(457.048035, 54.675922, 553.041687), 45), - new ParticleSpawn(new Vec3Comparable(457.514313, 54.678959, 552.861267), 55), - new ParticleSpawn(new Vec3Comparable(449.110443, 54.623035, 556.079163), 49) - )), - HandleCompassResult.SUCCESS, - SolverState.SOLVED); - - Vec3i magmaSolution = new Vec3i(737, 56, 444); - - Vec3Comparable kingMinesOrNucleusCoordsInRemnants = new Vec3Comparable(604, 100, 681); - Vec3Comparable odawaSolution = new Vec3Comparable(349, 110, 390); - - private final CompassUse nucleusCompass = new CompassUse( - 1647745029814L, - new BlockPos(512, 106, 512), - null, - HandleCompassResult.PLAYER_IN_NUCLEUS, - SolverState.NOT_STARTED); - - private void resetSolverState() { - solver.initWorld(); - systemTimeMillis = 0; - solver.currentTimeMillis = () -> (systemTimeMillis); - // These must be overridden for all test cases or an exception will be thrown when - // data that is only present when running in the context of Minecraft is accessed. - solver.keyInInventory = () -> false; - solver.kingsScentPresent = () -> false; - solver.foundCrystals = () -> EnumSet.noneOf(Crystal.class); - } - - @BeforeEach - void setUp() { - NEUDebugLogger.logMethod = CrystalWishingCompassSolverTest::neuDebugLog; - NEUDebugLogger.allFlagsEnabled = true; - resetSolverState(); - } - - private void checkSolution(Solution solution) { - int index = 0; - for (CompassUse compassUse : solution.compassUses) { - systemTimeMillis += compassUse.timeIncrementMillis; - HandleCompassResult handleCompassResult = solver.handleCompassUse(compassUse.playerPos); - Assertions.assertEquals(compassUse.expectedHandleCompassUseResult, - handleCompassResult, - "CompassUse index " + index); - - for (ParticleSpawn particle : compassUse.particles) { - systemTimeMillis += particle.timeIncrementMillis; - solver.solveUsingParticle( - particle.spawnLocation.xCoord, - particle.spawnLocation.yCoord, - particle.spawnLocation.zCoord, - systemTimeMillis); - } - - Assertions.assertEquals(compassUse.expectedSolverState, - solver.getSolverState(), - "CompassUse index " + index); - if (compassUse.expectedSolverState == SolverState.SOLVED) { - Assertions.assertEquals(solution.expectedSolutionCoords, - solver.getSolutionCoords()); - } - - index++; - } - } - - @Test - void first_compass_without_particles_sets_solver_state_to_processing_first_use() { - // Arrange - CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); - compassUse.particles.clear(); - compassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; - - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(compassUse)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void new_compass_resets_processing_first_use_state_after_timeout() { - // Arrange - CompassUse processingFirstUseCompassUse = new CompassUse(minesOfDivanCompassUse1); - processingFirstUseCompassUse.particles.clear(); - processingFirstUseCompassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; - Solution processingFirstUseSolution = new Solution( - new ArrayList<>(Collections.singletonList(processingFirstUseCompassUse)), - Vec3i.NULL_VECTOR); - checkSolution(processingFirstUseSolution); - Assertions.assertEquals(SolverState.PROCESSING_FIRST_USE, solver.getSolverState()); - - CompassUse resetStateCompassUse = new CompassUse(jungleCompassUse1); - resetStateCompassUse.timeIncrementMillis = ALL_PARTICLES_MAX_MILLIS + 1; - resetStateCompassUse.expectedHandleCompassUseResult = HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; - resetStateCompassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; - Solution goodSolution = new Solution( - new ArrayList<>(Collections.singletonList(resetStateCompassUse)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(goodSolution); - } - - @Test - void first_compass_with_repeating_particles_sets_state_to_need_second_compass() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void first_compass_in_nucleus_sets_state_to_player_in_nucleus() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(nucleusCompass)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void use_while_handling_previous_returns_still_processing_first_use() { - // Arrange - CompassUse compassUse1 = new CompassUse( - 1647528732979L, - new BlockPos(754, 137, 239), - new ArrayList<>(Collections.singletonList( - new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137) - )), - HandleCompassResult.SUCCESS, - SolverState.PROCESSING_FIRST_USE); - - // STILL_PROCESSING_FIRST_USE is expected instead of LOCATION_TOO_CLOSE since the solver - // isn't ready for the second compass use, which includes the location check - CompassUse compassUse2 = new CompassUse(compassUse1); - compassUse2.expectedHandleCompassUseResult = HandleCompassResult.STILL_PROCESSING_PRIOR_USE; - compassUse2.timeIncrementMillis = 500; - - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void missing_repeating_particles_sets_state_to_failed_timeout_no_repeating() { - CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); - compassUse.particles.remove(compassUse.particles.size()-1); - compassUse.particles.get(compassUse.particles.size()-1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; - compassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; - - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(compassUse)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void compasses_too_close_returns_location_too_close_and_solver_state_is_still_need_second_compass() { - // Arrange - CompassUse secondCompassUse = new CompassUse( - DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, - minesOfDivanCompassUse1.playerPos.add(2, 2, 2), - null, - HandleCompassResult.LOCATION_TOO_CLOSE, - SolverState.NEED_SECOND_COMPASS - ); - - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, secondCompassUse)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void second_compass_sets_solver_state_to_processing_second_use() { - // Arrange - CompassUse secondCompassUse = new CompassUse(minesOfDivanCompassUse2); - secondCompassUse.expectedSolverState = SolverState.PROCESSING_SECOND_USE; - secondCompassUse.particles.clear(); - - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), - minesOfDivanSolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void second_compass_with_repeating_particles_sets_state_to_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), - minesOfDivanSolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void particles_from_first_compass_are_ignored_by_second_compass() { - // Arrange - CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); - compassUse2.particles.add(0, minesOfDivanCompassUse1.particles.get(0)); - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), - minesOfDivanSolution - ); - - // Act & Assert - checkSolution(solution); - } - - private void execInvalidParticlesInvalidSolution() { - // Arrange - CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); - - // reverse the direction of the particles, moving the repeat particle - // to "new" end - compassUse2.particles.remove(compassUse2.particles.size()-1); - Collections.reverse(compassUse2.particles); - // add a new repeat particle - compassUse2.particles.add(new ParticleSpawn(compassUse2.particles.get(0))); - - // Adjust the player position - compassUse2.playerPos = new BlockPos(compassUse2.particles.get(0).spawnLocation); - compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void second_compass_with_inverted_particles_sets_state_to_invalid_solution() { - // Arrange, Act, and Assert - execInvalidParticlesInvalidSolution(); - } - - @Test - void solution_outside_hollows_sets_state_to_invalid_solution() { - // Arrange - CompassUse compassUse1 = new CompassUse(minesOfDivanCompassUse1); - CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); - Vec3 offset = new Vec3(0.0, 200.0, 0.0); - - compassUse1.playerPos = compassUse1.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); - for (ParticleSpawn particle : compassUse1.particles) { - particle.spawnLocation = particle.spawnLocation.add(offset); - } - - compassUse2.playerPos = compassUse2.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); - for (ParticleSpawn particle : compassUse2.particles) { - particle.spawnLocation = particle.spawnLocation.add(offset); - } - compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; - - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void second_solution_can_be_solved_after_state_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), - minesOfDivanSolution - ); - checkSolution(solution); - - Solution solution2 = new Solution( - new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), - precursorCitySolution - ); - - // Act & Assert - checkSolution(solution2); - } - - @Test - void second_solution_can_be_solved_after_state_is_failed() { - // Arrange - execInvalidParticlesInvalidSolution(); - Assertions.assertEquals(solver.getSolverState(), SolverState.FAILED_INVALID_SOLUTION); - - Solution solution2 = new Solution( - new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), - precursorCitySolution - ); - - // Act & Assert - checkSolution(solution2); - } - - @Test - void distant_particles_are_ignored() { - // Arrange - CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); - compassUse.particles.get(2).spawnLocation.addVector(100.0, 100.0, 100.0); - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act & Assert - checkSolution(solution); - } - - @Test - void possible_targets_includes_queen_and_excludes_king_when_kings_scent_is_present() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); - solver.kingsScentPresent = () -> true; - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_QUEEN)); - Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_KING)); - } - - @Test - void possible_targets_excludes_king_and_includes_queen_when_kings_scent_is_not_present() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); - solver.kingsScentPresent = () -> false; - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_QUEEN)); - Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); - } - - @Test - void possible_targets_excludes_odawa_and_includes_temple_when_key_in_inventory() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); - solver.keyInInventory = () -> true; - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertFalse(targets.contains(CompassTarget.ODAWA)); - Assertions.assertTrue(targets.contains(CompassTarget.JUNGLE_TEMPLE)); - } - - @Test - void possible_targets_includes_odawa_and_excludes_temple_when_key_not_in_inventory() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); - solver.keyInInventory = () -> false; - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); - Assertions.assertFalse(targets.contains(CompassTarget.JUNGLE_TEMPLE)); - } - - @Test - void possible_targets_only_contains_city_and_nucleus_when_in_remnants_without_sapphire_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(precursorCityCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.PRECURSOR_CITY)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_mines_and_nucleus_when_in_deposits_without_jade_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.MINES_OF_DIVAN)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_king_or_queen_and_nucleus_when_in_holdout_without_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING) || - targets.contains(CompassTarget.GOBLIN_QUEEN)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_king_and_odawa_and_nucleus_when_in_jungle_without_crystal_or_key() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); - Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(3, targets.size()); - } - - @Test - void possible_targets_only_contains_bal_and_nucleus_when_in_magma_fields_without_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(magmaCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.BAL)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - private void CheckExcludedTargetsForCrystals( - CompassUse compassUseToExecute, - ArrayList excludedTargets, - EnumSet foundCrystals) { - // Arrange - EnumSet targets; - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(compassUseToExecute)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - targets = solver.getPossibleTargets(); - boolean targetFound = false; - for (CompassTarget target : excludedTargets) { - if (targets.contains(target)) { - targetFound = true; - break; - } - } - Assertions.assertTrue(targetFound); - - resetSolverState(); - solver.foundCrystals = () -> foundCrystals; - checkSolution(solution); - targets = solver.getPossibleTargets(); - - // Assert - for (CompassTarget target : excludedTargets) { - Assertions.assertFalse(targets.contains(target)); - } - } - - @Test - void possible_targets_excludes_king_and_queen_when_amber_crystal_found() { - ArrayList excludedTargets = new ArrayList<>(Arrays.asList( - CompassTarget.GOBLIN_KING, - CompassTarget.GOBLIN_QUEEN - )); - CheckExcludedTargetsForCrystals(goblinHoldoutCompassUse1, excludedTargets, EnumSet.of(Crystal.AMBER)); - } - - @Test - void possible_targets_excludes_odawa_and_temple_when_amethyst_crystal_found() { - ArrayList excludedTargets = new ArrayList<>(Arrays.asList( - CompassTarget.ODAWA, - CompassTarget.JUNGLE_TEMPLE)); - CheckExcludedTargetsForCrystals(jungleCompassUse1, excludedTargets, EnumSet.of(Crystal.AMETHYST)); - } - - @Test - void possible_targets_excludes_mines_when_jade_crystal_found() { - ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( - CompassTarget.MINES_OF_DIVAN)); - CheckExcludedTargetsForCrystals(minesOfDivanCompassUse1, excludedTargets, EnumSet.of(Crystal.JADE)); - } - - @Test - void possible_targets_excludes_city_when_sapphire_crystal_found() { - ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( - CompassTarget.PRECURSOR_CITY)); - CheckExcludedTargetsForCrystals(precursorCityCompassUse1, excludedTargets, EnumSet.of(Crystal.SAPPHIRE)); - } - - @Test - void possible_targets_excludes_bal_when_topaz_crystal_found() { - ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( - CompassTarget.BAL)); - CheckExcludedTargetsForCrystals(magmaCompassUse1, excludedTargets, EnumSet.of(Crystal.TOPAZ)); - } - - @Test - void solver_resets_when_possible_targets_change_based_on_found_crystals() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; - solver.foundCrystals = () -> EnumSet.of(Crystal.JADE); - HandleCompassResult handleCompassResult = solver.handleCompassUse(minesOfDivanCompassUse2.playerPos); - - // Assert - Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); - Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); - } - - @Test - void solver_resets_when_possible_targets_change_based_on_location() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; - BlockPos newLocation = minesOfDivanCompassUse2.playerPos.add(-400, 0 ,0); - HandleCompassResult handleCompassResult = solver.handleCompassUse(newLocation); - - // Assert - Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); - Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); - } - - @Test - void mines_of_divan_solution_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), - minesOfDivanSolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void jungle_temple_solution_with_key_in_inventory_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), - jungleSolutionTempleDoor - ); - solver.keyInInventory = () -> true; - - // Act & Assert - checkSolution(solution); - } - - @Test - void jungle_temple_solution_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), - jungleSolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void precursor_city_solution_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), - precursorCitySolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void goblin_king_solution_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(goblinHoldoutCompassUse1, goblinHoldoutCompassUse2)), - goblinHoldoutKingSolution - ); - - // Act & Assert - checkSolution(solution); - } - - @Test - void bal_solution_is_solved() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Arrays.asList(magmaCompassUse1, magmaCompassUse2)), - magmaSolution - ); - - // Act & Assert - checkSolution(solution); - } - - EnumSet GetSolutionTargetsHelper( - EnumSet possibleTargets, - Vec3Comparable solutionCoords, - int expectedSolutionCount) { - EnumSet solutionTargets = - CrystalWishingCompassSolver.getSolutionTargets(possibleTargets, solutionCoords); - Assertions.assertEquals(expectedSolutionCount, solutionTargets.size()); - return solutionTargets; - } - - @Test - void solutionPossibleTargets_removes_nucleus_when_coords_not_in_nucleus() { - // Arrange & Act - EnumSet solutionTargets = GetSolutionTargetsHelper( - EnumSet.allOf(CompassTarget.class), - new Vec3Comparable(minesOfDivanSolution), - 2); - - //Assert - Assertions.assertFalse(solutionTargets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - } - - @Test - void solutionPossibleTargets_includes_adjacent_zones() { - // Arrange & Act - EnumSet solutionTargets = GetSolutionTargetsHelper( - EnumSet.allOf(CompassTarget.class), - kingMinesOrNucleusCoordsInRemnants, - 2); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); - Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); - } - - @Test - void solutionPossibleTargets_skips_y_filtering_when_single_possible_target() { - // Arrange & Act - EnumSet solutionTargets = GetSolutionTargetsHelper( - EnumSet.of(CompassTarget.GOBLIN_QUEEN), - new Vec3Comparable(goblinHoldoutKingSolution), // Coords not valid for queen - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); - } - - @Test - void solutionPossibleTargets_still_filters_non_adjacent_when_single_possible_target() { - // Arrange, Act and Assert - GetSolutionTargetsHelper( - EnumSet.of(CompassTarget.ODAWA), - kingMinesOrNucleusCoordsInRemnants, - 0); - } - - @Test - void solutionPossibleTargets_includes_king_based_on_y_coordinate() { - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.ODAWA); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(goblinHoldoutKingSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); - } - - @Test - void solutionPossibleTargets_includes_odawa_based_on_y_coordinate() { - // Arrange & Act - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.GOBLIN_KING); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(odawaSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); - } - - @Test - void solutionPossibleTargets_includes_mines_based_on_y_coordinate() { - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.ODAWA); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(minesOfDivanSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); - } - - @Test - void solutionPossibleTargets_includes_temple_based_on_y_coordinate() { - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.BAL); - possibleTargets.remove(CompassTarget.ODAWA); - possibleTargets.remove(CompassTarget.GOBLIN_KING); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(jungleSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); - } - - @Test - void solutionPossibleTargets_includes_queen_based_on_y_coordinate() { - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.GOBLIN_KING); - possibleTargets.remove(CompassTarget.ODAWA); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(goblinHoldoutQueenSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); - } - - @Test - void solutionPossibleTargets_includes_city_based_on_y_coordinate() { - // Arrange & Act - EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); - possibleTargets.remove(CompassTarget.GOBLIN_KING); - EnumSet solutionTargets = GetSolutionTargetsHelper( - possibleTargets, - new Vec3Comparable(precursorCitySolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); - } - - @Test - void solutionPossibleTargets_includes_bal_based_on_y_coordinate() { - // Arrange & Act - EnumSet solutionTargets = GetSolutionTargetsHelper( - EnumSet.allOf(CompassTarget.class), - new Vec3Comparable(magmaSolution), - 1); - - //Assert - Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); - } - - // Represents a particle spawn, including: - // - Milliseconds to increment the "system time" prior to spawn. - // - The particle spawn location. - static class ParticleSpawn { - long timeIncrementMillis; - Vec3Comparable spawnLocation; - - ParticleSpawn(Vec3Comparable spawnLocation, long timeIncrementMillis) { - this.timeIncrementMillis = timeIncrementMillis; - this.spawnLocation = spawnLocation; - } - - ParticleSpawn(ParticleSpawn source) { - timeIncrementMillis = source.timeIncrementMillis; - spawnLocation = new Vec3Comparable(source.spawnLocation); - } - } - - // Represents a use of the wishing compass, including: - // - Milliseconds to increment the "system time" prior to use. - // - The player's position when the compass is used. - // - The resulting set of particles - // - The expected state of the wishing compass solver after this compass is used - static class CompassUse { - long timeIncrementMillis; - BlockPos playerPos; - ArrayList particles; - HandleCompassResult expectedHandleCompassUseResult; - SolverState expectedSolverState; - - CompassUse(long timeIncrementMillis, - BlockPos playerPos, - ArrayList particles, - HandleCompassResult expectedHandleCompassUseResult, - SolverState expectedState) { - this.timeIncrementMillis = timeIncrementMillis; - this.playerPos = playerPos; - this.particles = particles != null ? particles : new ArrayList<>(); - this.expectedHandleCompassUseResult = expectedHandleCompassUseResult; - this.expectedSolverState = expectedState; - } - - CompassUse(CompassUse source) { - this.timeIncrementMillis = source.timeIncrementMillis; - this.playerPos = new BlockPos(source.playerPos); - this.particles = new ArrayList<>(source.particles); - this.expectedHandleCompassUseResult = source.expectedHandleCompassUseResult; - this.expectedSolverState = source.expectedSolverState; - } - } - - static class Solution { - ArrayList compassUses; - Vec3i expectedSolutionCoords; - - Solution(ArrayList compassUses, Vec3i expectedSolutionCoords) { - this.compassUses = compassUses; - this.expectedSolutionCoords = new Vec3i(expectedSolutionCoords.getX(), expectedSolutionCoords.getY(), expectedSolutionCoords.getZ()); - } - } - - private static void neuDebugLog(String message) { - System.out.println(message); - } -} diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml deleted file mode 100644 index 25209eae..00000000 --- a/src/test/resources/log4j2-test.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - -- cgit From f237ae4cecdfa5c00ee83bd0176a591a2b174913 Mon Sep 17 00:00:00 2001 From: CraftyOldMiner <85420839+CraftyOldMiner@users.noreply.github.com> Date: Sun, 27 Mar 2022 23:07:57 -0500 Subject: Restore metal detector and wishing compass changes that were nuked by #94 (#104) --- Update Notes/2.1.md | 3 +- build.gradle.kts | 5 + .../notenoughupdates/commands/dev/DiagCommand.java | 27 +- .../notenoughupdates/core/util/Vec3Comparable.java | 129 +++ .../miscfeatures/CrystalMetalDetectorSolver.java | 450 +++++--- .../miscfeatures/CrystalWishingCompassSolver.java | 942 ++++++++++++--- .../options/seperateSections/Mining.java | 54 +- .../notenoughupdates/util/NEUDebugLogger.java | 10 +- .../moulberry/notenoughupdates/util/SBInfo.java | 14 +- .../core/util/Vec3ComparableTest.java | 193 ++++ .../CrystalMetalDetectorSolverTest.java | 204 ++++ .../CrystalWishingCompassSolverTest.java | 1206 ++++++++++++++++++++ src/test/resources/log4j2-test.xml | 16 + 13 files changed, 2916 insertions(+), 337 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java create mode 100644 src/test/resources/log4j2-test.xml (limited to 'src/test/java') diff --git a/Update Notes/2.1.md b/Update Notes/2.1.md index 98672187..4e8e7bf8 100644 --- a/Update Notes/2.1.md +++ b/Update Notes/2.1.md @@ -14,7 +14,7 @@ - Added a pet overlay that shows your active pet in your inventory - [Price graph for items on /ah and /bz](https://cdn.discordapp.com/attachments/896407218151366687/926968296929107999/unknown.png) - DeDiamondPro - [Added bingo tab in /pv](https://cdn.discordapp.com/attachments/702456294874808330/951909539383500820/unknown.png) - Lulonaut -- Added wishing compass solver that shows target coordinates using two samples - CraftyOldMiner +- Added wishing compass solver that shows target coordinates, structure, and integrates with Skytils waypoints - CraftyOldMiner - Improved metal detector logic to solve using a single position in most cases using known locations based on Keeper coordinates - CraftyOldMiner - Added support for official Hypixel wiki, can be toggled in /neu misc - DeDiamondPro ### **Minor Changes:** @@ -104,5 +104,6 @@ - Added 4 new textures for the on/off switches in /neu - Code Cleanup - IRONM00N - Renamed Keebler408 to CraftyOldMiner +- Added JUnit unit tests for metal detector and wishing compass solver ### **Previous change log** https://github.com/NotEnoughUpdates/NotEnoughUpdates/blob/master/Update%20Notes/2.0-Pre31-Release.md diff --git a/build.gradle.kts b/build.gradle.kts index e47b0f67..e134387e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,6 +67,7 @@ dependencies { annotationProcessor("org.spongepowered:mixin:0.7.11-SNAPSHOT") implementation("com.fasterxml.jackson.core:jackson-core:2.13.1") implementation("info.bliki.wiki:bliki-core:3.1.0") + testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") } @@ -76,6 +77,10 @@ tasks.withType(JavaCompile::class) { options.encoding = "UTF-8" } +tasks.named("test") { + useJUnitPlatform() +} + tasks.withType(Jar::class) { archiveBaseName.set("NotEnoughUpdates") manifest.attributes.run { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java index 88264538..dab99698 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java @@ -17,8 +17,10 @@ public class DiagCommand extends ClientCommandBase { private static final String USAGE_TEXT = EnumChatFormatting.WHITE + "Usage: /neudiag \n\n" + - "/neudiag metal Metal Detector Solver diagnostics\n" + - "/neudiag wishing Wishing Compass Solver diagnostics\n" + + "/neudiag metal Metal Detector Solver diagnostics\n" + + " Show current solution diags\n" + + " center= Disable / enable using center\n" + + "/neudiag wishing Wishing Compass Solver diagnostics\n" + "/neudiag debug\n" + " Show current flags\n" + " Enable/disable flag\n"; @@ -37,7 +39,26 @@ public class DiagCommand extends ClientCommandBase { String command = args[0].toLowerCase(); switch (command) { case "metal": - CrystalMetalDetectorSolver.logDiagnosticData(true); + if (args.length == 1) { + CrystalMetalDetectorSolver.logDiagnosticData(true); + return; + } + + String subCommand = args[1].toLowerCase(); + if (subCommand.equals("center=off")) { + CrystalMetalDetectorSolver.setDebugDoNotUseCenter(true); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "Center coordinates-based solutions disabled")); + } + else if (subCommand.equals("center=on")) { + CrystalMetalDetectorSolver.setDebugDoNotUseCenter(false); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "Center coordinates-based solutions enabled")); + } else { + showUsage(sender); + return; + } + break; case "wishing": CrystalWishingCompassSolver.getInstance().logDiagnosticData(true); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java new file mode 100644 index 00000000..cd144c21 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java @@ -0,0 +1,129 @@ +package io.github.moulberry.notenoughupdates.core.util; + +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; + +public class Vec3Comparable extends Vec3 implements Comparable { + public static final Vec3Comparable NULL_VECTOR = new Vec3Comparable(0.0, 0.0, 0.0); + + public Vec3Comparable(double x, double y, double z) { + super(x, y, z); + } + + public Vec3Comparable(Vec3i sourceVec) { + super(sourceVec); + } + + public Vec3Comparable(Vec3 source) { + super(source.xCoord, source.yCoord, source.zCoord); + } + + public Vec3Comparable(BlockPos source) { + + super(source.getX(), source.getY(), source.getZ()); + } + + public Vec3Comparable(Vec3Comparable source) { + super(source.xCoord, source.yCoord, source.zCoord); + } + + @Override + public Vec3Comparable subtractReverse(Vec3 vec) { + return new Vec3Comparable(super.subtractReverse(vec)); + } + + @Override + public Vec3Comparable normalize() { + return new Vec3Comparable(super.normalize()); + } + + @Override + public Vec3Comparable crossProduct(Vec3 vec) { + return new Vec3Comparable(super.crossProduct(vec)); + } + + @Override + public Vec3Comparable subtract(Vec3 vec) { + return new Vec3Comparable(super.subtract(vec)); + } + + @Override + public Vec3Comparable subtract(double x, double y, double z) { + return new Vec3Comparable(super.subtract(x, y, z)); + } + + @Override + public Vec3Comparable add(Vec3 other) { + return new Vec3Comparable(super.add(other)); + } + + @Override + public Vec3Comparable addVector(double x, double y, double z) { + return new Vec3Comparable(super.addVector(x, y, z)); + } + + @Override + public Vec3Comparable getIntermediateWithXValue(Vec3 vec, double x) { + return new Vec3Comparable(super.getIntermediateWithXValue(vec, x)); + } + + @Override + public Vec3Comparable getIntermediateWithYValue(Vec3 vec, double y) { + return new Vec3Comparable(super.getIntermediateWithYValue(vec, y)); + } + + @Override + public Vec3Comparable getIntermediateWithZValue(Vec3 vec, double z) { + return new Vec3Comparable(super.getIntermediateWithZValue(vec, z)); + } + + @Override + public Vec3Comparable rotatePitch(float pitch) { + return new Vec3Comparable(super.rotatePitch(pitch)); + } + + @Override + public Vec3Comparable rotateYaw(float yaw) { + return new Vec3Comparable(super.rotateYaw(yaw)); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } else if (!(other instanceof Vec3Comparable)) { + return false; + } else { + Vec3Comparable vec3c = (Vec3Comparable) other; + return this.xCoord == vec3c.xCoord && this.yCoord == vec3c.yCoord && this.zCoord == vec3c.zCoord; + } + } + + @Override + public int hashCode() { + long bits = 1L; + bits = 31L * bits + doubleToLongBits(xCoord); + bits = 31L * bits + doubleToLongBits(yCoord); + bits = 31L * bits + doubleToLongBits(zCoord); + return (int) (bits ^ (bits >> 32)); + } + + public int compareTo(Vec3Comparable other) { + return this.yCoord == other.yCoord ? + (this.zCoord == other.zCoord ? + (int)(this.xCoord - other.xCoord) + : (int)(this.zCoord - other.zCoord)) + : (int)(this.yCoord - other.yCoord); + } + + public boolean signumEquals(Vec3 other) { + return Math.signum(xCoord) == Math.signum(other.xCoord) && + Math.signum(yCoord) == Math.signum(other.yCoord) && + Math.signum(zCoord) == Math.signum(other.zCoord); + } + + private static long doubleToLongBits(double d) { + return d == 0.0 ? 0L : Double.doubleToLongBits(d); + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java index 27c334ad..f43ebda2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java @@ -1,6 +1,7 @@ package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; import io.github.moulberry.notenoughupdates.options.customtypes.NEUDebugFlag; import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; @@ -11,7 +12,6 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; -import net.minecraft.util.Vec3; import net.minecraft.util.Vec3i; import java.util.Arrays; @@ -22,25 +22,35 @@ import java.util.List; import java.util.stream.Collectors; public class CrystalMetalDetectorSolver { + enum SolutionState { + NOT_STARTED, + MULTIPLE, + MULTIPLE_KNOWN, + FOUND, + FOUND_KNOWN, + FAILED, + INVALID, + } + private static final Minecraft mc = Minecraft.getMinecraft(); - private static BlockPos prevPlayerPos; - private static double prevDistToTreasure = 0; + private static Vec3Comparable prevPlayerPos; + private static double prevDistToTreasure; private static HashSet possibleBlocks = new HashSet<>(); - private static final HashMap evaluatedPlayerPositions = new HashMap<>(); - private static BlockPos blockPosIfLastSolutionInvalid; - private static Boolean chestRecentlyFound = false; - private static long chestLastFoundMillis = 0; + private static final HashMap evaluatedPlayerPositions = new HashMap<>(); + private static boolean chestRecentlyFound; + private static long chestLastFoundMillis; private static final HashSet openedChestPositions = new HashSet<>(); // Keeper and Mines of Divan center location info private static Vec3i minesCenter; - private static boolean visitKeeperMessagePrinted = false; - private static String KEEPER_OF_STRING = "Keeper of "; - private static String DIAMOND_STRING = "diamond"; - private static String LAPIS_STRING = "lapis"; - private static String EMERALD_STRING = "emerald"; - private static String GOLD_STRING = "gold"; + private static boolean debugDoNotUseCenter = false; + private static boolean visitKeeperMessagePrinted; + private static final String KEEPER_OF_STRING = "Keeper of "; + private static final String DIAMOND_STRING = "diamond"; + private static final String LAPIS_STRING = "lapis"; + private static final String EMERALD_STRING = "emerald"; + private static final String GOLD_STRING = "gold"; private static final HashMap keeperOffsets = new HashMap() {{ put(DIAMOND_STRING, new Vec3i(33,0,3)); put(LAPIS_STRING, new Vec3i(-33,0,-3)); @@ -94,6 +104,14 @@ public class CrystalMetalDetectorSolver { -9896946827286L // x=-37, y=-21, z=-22 )); + static Predicate treasureAllowedPredicate = CrystalMetalDetectorSolver::treasureAllowed; + static SolutionState currentState = SolutionState.NOT_STARTED; + static SolutionState previousState = SolutionState.NOT_STARTED; + + public interface Predicate { + boolean check(BlockPos blockPos); + } + public static void process(IChatComponent message) { if (SBInfo.getInstance().getLocation() == null || !NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled || @@ -102,7 +120,7 @@ public class CrystalMetalDetectorSolver { return; } - locateMinesCenterIfNeeded(); + boolean centerNewlyDiscovered = locateMinesCenterIfNeeded(); double distToTreasure = Double.parseDouble(message .getUnformattedText() @@ -122,20 +140,64 @@ public class CrystalMetalDetectorSolver { chestRecentlyFound = false; } - if (prevDistToTreasure == distToTreasure && - prevPlayerPos.equals(mc.thePlayer.getPosition()) && - !evaluatedPlayerPositions.keySet().contains(mc.thePlayer.getPosition())) { + SolutionState originalState = currentState; + int originalCount = possibleBlocks.size(); + Vec3Comparable adjustedPlayerPos = getPlayerPosAdjustedForEyeHeight(); + findPossibleSolutions(distToTreasure, adjustedPlayerPos, centerNewlyDiscovered); + if (currentState != originalState || originalCount != possibleBlocks.size()) { + switch (currentState) { + case FOUND_KNOWN: + NEUDebugLogger.log(NEUDebugFlag.METAL, "Known location identified."); + // falls through + case FOUND: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] Found solution.")); + if (NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL) && + (previousState == SolutionState.INVALID || previousState == SolutionState.FAILED)) { + NEUDebugLogger.log(NEUDebugFlag.METAL, + EnumChatFormatting.AQUA + "Solution coordinates: " + + EnumChatFormatting.WHITE + possibleBlocks.iterator().next().toString()); + } + break; + case INVALID: + mc.thePlayer.addChatMessage(new ChatComponentText( + EnumChatFormatting.RED + "[NEU] Previous solution is invalid.")); + logDiagnosticData(false); + resetSolution(false); + break; + case FAILED: + mc.thePlayer.addChatMessage(new ChatComponentText( + EnumChatFormatting.RED + "[NEU] Failed to find a solution.")); + logDiagnosticData(false); + resetSolution(false); + break; + case MULTIPLE_KNOWN: + NEUDebugLogger.log(NEUDebugFlag.METAL, "Multiple known locations identified:"); + // falls through + case MULTIPLE: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Need another position to find solution. Possible blocks: " + possibleBlocks.size())); + break; + default: + throw new IllegalStateException("Metal detector is in invalid state"); + } + } + } + + static void findPossibleSolutions(double distToTreasure, Vec3Comparable playerPos, boolean centerNewlyDiscovered) { + if (prevDistToTreasure == distToTreasure && prevPlayerPos.equals(playerPos) && + !evaluatedPlayerPositions.containsKey(playerPos)) { + evaluatedPlayerPositions.put(playerPos, distToTreasure); if (possibleBlocks.size() == 0) { - evaluatedPlayerPositions.put(mc.thePlayer.getPosition(), distToTreasure); for (int zOffset = (int) Math.floor(-distToTreasure); zOffset <= Math.ceil(distToTreasure); zOffset++) { for (int y = 65; y <= 75; y++) { double calculatedDist = 0; int xOffset = 0; while (calculatedDist < distToTreasure) { - BlockPos pos = new BlockPos(Math.floor(mc.thePlayer.posX) + xOffset, - y, Math.floor(mc.thePlayer.posZ) + zOffset); - calculatedDist = getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)); - if (round(calculatedDist, 1) == distToTreasure && treasureAllowed(pos)) { + BlockPos pos = new BlockPos(Math.floor(playerPos.xCoord) + xOffset, + y, Math.floor(playerPos.zCoord) + zOffset + ); + calculatedDist = playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)); + if (round(calculatedDist, 1) == distToTreasure && treasureAllowedPredicate.check(pos)) { possibleBlocks.add(pos); } xOffset++; @@ -143,10 +205,11 @@ public class CrystalMetalDetectorSolver { xOffset = 0; calculatedDist = 0; while (calculatedDist < distToTreasure) { - BlockPos pos = new BlockPos(Math.floor(mc.thePlayer.posX) - xOffset, - y, Math.floor(mc.thePlayer.posZ) + zOffset); - calculatedDist = getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)); - if (round(calculatedDist, 1) == distToTreasure && treasureAllowed(pos)) { + BlockPos pos = new BlockPos(Math.floor(playerPos.xCoord) - xOffset, + y, Math.floor(playerPos.zCoord) + zOffset + ); + calculatedDist = playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)); + if (round(calculatedDist, 1) == distToTreasure && treasureAllowedPredicate.check(pos)) { possibleBlocks.add(pos); } xOffset++; @@ -154,48 +217,33 @@ public class CrystalMetalDetectorSolver { } } - checkAndDisplaySolutionState(); + updateSolutionState(); } else if (possibleBlocks.size() != 1) { - evaluatedPlayerPositions.put(mc.thePlayer.getPosition().getImmutable(), distToTreasure); HashSet temp = new HashSet<>(); for (BlockPos pos : possibleBlocks) { - if (round(getPlayerPos().distanceTo(new Vec3(pos).addVector(0D, 1D, 0D)), 1) == distToTreasure) { + if (round(playerPos.distanceTo(new Vec3Comparable(pos).addVector(0D, 1D, 0D)), 1) == distToTreasure) { temp.add(pos); } } possibleBlocks = temp; - checkAndDisplaySolutionState(); + updateSolutionState(); } else { BlockPos pos = possibleBlocks.iterator().next(); - if (Math.abs(distToTreasure - (getPlayerPos().distanceTo(new Vec3(pos)))) > 5) { - mc.thePlayer.addChatMessage(new ChatComponentText( - EnumChatFormatting.RED + "[NEU] Previous solution is invalid.")); - blockPosIfLastSolutionInvalid = pos.getImmutable(); - logDiagnosticData(false); - resetSolution(false); + if (Math.abs(distToTreasure - (playerPos.distanceTo(new Vec3Comparable(pos)))) > 5) { + currentState = SolutionState.INVALID; } } + } else if (centerNewlyDiscovered && possibleBlocks.size() > 1) { + updateSolutionState(); } - prevPlayerPos = mc.thePlayer.getPosition().getImmutable(); + prevPlayerPos = playerPos; prevDistToTreasure = distToTreasure; } - private static void checkForSingleKnownLocationMatch() { - if (minesCenter == BlockPos.NULL_VECTOR || possibleBlocks.size() < 2) { - return; - } - - HashSet temp = possibleBlocks.stream() - .filter(block -> knownChestOffsets.contains(block.subtract(minesCenter).toLong())) - .collect(Collectors.toCollection(HashSet::new)); - if (temp.size() == 1) { - possibleBlocks = temp; - NEUDebugLogger.log(NEUDebugFlag.METAL, "Known location identified."); - } else if (temp.size() > 1) { - NEUDebugLogger.log(NEUDebugFlag.METAL, temp.size() + " known locations identified:"); - } + public static void setDebugDoNotUseCenter(boolean val) { + debugDoNotUseCenter = val; } private static String getFriendlyBlockPositions(Collection positions) { @@ -206,10 +254,13 @@ public class CrystalMetalDetectorSolver { StringBuilder sb = new StringBuilder(); sb.append("\n"); for (BlockPos blockPos : positions) { - sb.append("Absolute: " + blockPos.toString()); + sb.append("Absolute: "); + sb.append(blockPos.toString()); if (minesCenter != Vec3i.NULL_VECTOR) { BlockPos relativeOffset = blockPos.subtract(minesCenter); - sb.append(", Relative: " + relativeOffset.toString() + " (" + relativeOffset.toLong() + ")"); + sb.append(", Relative: "); + sb.append(relativeOffset.toString() ); + sb.append(" (" + relativeOffset.toLong() + ")"); } sb.append("\n"); } @@ -217,22 +268,23 @@ public class CrystalMetalDetectorSolver { return sb.toString(); } - private static String getFriendlyEvaluatedPositions(HashMap positions) { - if (!NEUDebugLogger.isFlagEnabled(NEUDebugFlag.METAL) || positions.size() == 0) { + private static String getFriendlyEvaluatedPositions() { + if (!NEUDebugLogger.isFlagEnabled(NEUDebugFlag.METAL) || evaluatedPlayerPositions.size() == 0) { return ""; } StringBuilder sb = new StringBuilder(); sb.append("\n"); - for (BlockPos blockPos : positions.keySet()) { - sb.append("Absolute: " + blockPos.toString()); + for (Vec3Comparable vec : evaluatedPlayerPositions.keySet()) { + sb.append("Absolute: " + vec.toString()); if (minesCenter != Vec3i.NULL_VECTOR) { - BlockPos relativeOffset = blockPos.subtract(minesCenter); + BlockPos positionBlockPos = new BlockPos(vec); + BlockPos relativeOffset = positionBlockPos.subtract(minesCenter); sb.append(", Relative: " + relativeOffset.toString() + " (" + relativeOffset.toLong() + ")"); } sb.append(" Distance: "); - sb.append(positions.get(blockPos)); + sb.append(evaluatedPlayerPositions.get(vec)); sb.append("\n"); } @@ -240,101 +292,8 @@ public class CrystalMetalDetectorSolver { return sb.toString(); } - public static void logDiagnosticData(boolean outputAlways) { - if (SBInfo.getInstance().getLocation() == null) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] This command is not available outside SkyBlock")); - return; - } - - if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) - { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Metal Detector Solver is not enabled.")); - return; - } - - if (!outputAlways && !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL)) { - return; - } - - boolean originalDebugFlag = !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.add(NEUDebugFlag.METAL); - - StringBuilder diagsMessage = new StringBuilder(); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Mines Center: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((minesCenter == Vec3i.NULL_VECTOR) ? "" : minesCenter.toString()); - diagsMessage.append("\n"); - - diagsMessage.append("\n"); - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Previous Player Position: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Previous Distance To Treasure: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((prevDistToTreasure == 0) ? "" : prevDistToTreasure); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Last Solution Invalid Position: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((blockPosIfLastSolutionInvalid == null) ? "" : blockPosIfLastSolutionInvalid.toString()); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Current Possible Blocks: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(possibleBlocks.size()); - diagsMessage.append(getFriendlyBlockPositions(possibleBlocks)); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Evaluated player positions: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(evaluatedPlayerPositions.size()); - diagsMessage.append(getFriendlyEvaluatedPositions(evaluatedPlayerPositions)); - diagsMessage.append("\n"); - - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Chest locations not on known list:\n"); - diagsMessage.append(EnumChatFormatting.WHITE); - if (minesCenter != Vec3i.NULL_VECTOR) { - HashSet locationsNotOnKnownList = openedChestPositions - .stream() - .filter(block -> !knownChestOffsets.contains(block.subtract(minesCenter).toLong())) - .map(block -> block.subtract(minesCenter)) - .collect(Collectors.toCollection(HashSet::new)); - if (locationsNotOnKnownList.size() > 0) { - for (BlockPos blockPos : locationsNotOnKnownList) { - diagsMessage.append(String.format( - "%dL,\t\t// x=%d, y=%d, z=%d", - blockPos.toLong(), - blockPos.getX(), - blockPos.getY(), - blockPos.getZ() - )); - } - } - } else { - diagsMessage.append(""); - } - - NEUDebugLogger.log(NEUDebugFlag.METAL, diagsMessage.toString()); - - if (!originalDebugFlag) { - NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.remove(NEUDebugFlag.METAL); - } - } - public static void resetSolution(Boolean chestFound) { if (chestFound) { - blockPosIfLastSolutionInvalid = null; prevPlayerPos = null; prevDistToTreasure = 0; if (possibleBlocks.size() == 1) { @@ -345,15 +304,18 @@ public class CrystalMetalDetectorSolver { chestRecentlyFound = chestFound; possibleBlocks.clear(); evaluatedPlayerPositions.clear(); + previousState = currentState; + currentState = SolutionState.NOT_STARTED; } public static void initWorld() { minesCenter = Vec3i.NULL_VECTOR; visitKeeperMessagePrinted = false; - blockPosIfLastSolutionInvalid = null; openedChestPositions.clear(); + chestLastFoundMillis = 0; prevDistToTreasure = 0; prevPlayerPos = null; + currentState = SolutionState.NOT_STARTED; resetSolution(false); } @@ -377,15 +339,14 @@ public class CrystalMetalDetectorSolver { } } - private static void locateMinesCenterIfNeeded() { + private static boolean locateMinesCenterIfNeeded() { if (minesCenter != Vec3i.NULL_VECTOR) { - return; + return false; } List keeperEntities = mc.theWorld.getEntities(EntityArmorStand.class, (entity) -> { if (!entity.hasCustomName()) return false; - if (entity.getCustomNameTag().contains(KEEPER_OF_STRING)) return true; - return false; + return entity.getCustomNameTag().contains(KEEPER_OF_STRING); }); if (keeperEntities.size() == 0) { @@ -394,7 +355,7 @@ public class CrystalMetalDetectorSolver { "[NEU] Approach a Keeper while holding the metal detector to enable faster treasure hunting.")); visitKeeperMessagePrinted = true; } - return; + return false; } EntityArmorStand keeperEntity = keeperEntities.get(0); @@ -407,6 +368,11 @@ public class CrystalMetalDetectorSolver { EnumChatFormatting.WHITE + minesCenter.toString()); mc.thePlayer.addChatMessage(new ChatComponentText( EnumChatFormatting.YELLOW + "[NEU] Faster treasure hunting is now enabled based on Keeper location.")); + return true; + } + + public static void setMinesCenter(BlockPos center) { + minesCenter = center; } private static double round(double value, int precision) { @@ -414,42 +380,174 @@ public class CrystalMetalDetectorSolver { return (double) Math.round(value * scale) / scale; } - private static void checkAndDisplaySolutionState() { + private static void updateSolutionState() { + previousState = currentState; + if (possibleBlocks.size() == 0) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Failed to find a solution.")); - logDiagnosticData(false); - resetSolution(false); + currentState = SolutionState.FAILED; return; } - checkForSingleKnownLocationMatch(); - if (possibleBlocks.size() > 1) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Need another position to find solution. Possible blocks: " + possibleBlocks.size())); - } else { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] Found solution.")); + if (possibleBlocks.size() == 1) { + currentState = SolutionState.FOUND; + return; } + + // Narrow solutions using known locations if the mines center is known + if (minesCenter.equals(BlockPos.NULL_VECTOR) || debugDoNotUseCenter) { + currentState = SolutionState.MULTIPLE; + return; + } + + HashSet temp = + possibleBlocks.stream() + .filter(block -> knownChestOffsets.contains(block.subtract(minesCenter).toLong())) + .collect(Collectors.toCollection(HashSet::new)); + if (temp.size() == 0) { + currentState = SolutionState.MULTIPLE; + return; + } + + if (temp.size() == 1) { + possibleBlocks = temp; + currentState = SolutionState.FOUND_KNOWN; + return; + + } + + currentState = SolutionState.MULTIPLE_KNOWN; + } + + public static BlockPos getSolution() { + if (CrystalMetalDetectorSolver.possibleBlocks.size() != 1) { + return BlockPos.ORIGIN; + } + + return CrystalMetalDetectorSolver.possibleBlocks.stream().iterator().next(); } - private static Vec3 getPlayerPos() { - return new Vec3( + private static Vec3Comparable getPlayerPosAdjustedForEyeHeight() { + return new Vec3Comparable( mc.thePlayer.posX, mc.thePlayer.posY + (mc.thePlayer.getEyeHeight() - mc.thePlayer.getDefaultEyeHeight()), mc.thePlayer.posZ ); } - private static boolean treasureAllowed(BlockPos pos) { - boolean airAbove = mc.theWorld. - getBlockState(pos.add(0, 1, 0)).getBlock().getRegistryName().equals("minecraft:air"); - boolean allowedBlockType = mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:gold_block") || + static boolean isKnownOffset(BlockPos pos) { + return knownChestOffsets.contains(pos.subtract(minesCenter).toLong()); + } + + static boolean isAllowedBlockType(BlockPos pos) { + return mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:gold_block") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:prismarine") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:chest") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_glass") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_glass_pane") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:wool") || mc.theWorld.getBlockState(pos).getBlock().getRegistryName().equals("minecraft:stained_hardened_clay"); - boolean knownOffset = knownChestOffsets.contains(pos.subtract(minesCenter).toLong()); - return airAbove & (knownOffset | allowedBlockType); + } + + static boolean isAirAbove(BlockPos pos) { + return mc.theWorld. + getBlockState(pos.add(0, 1, 0)).getBlock().getRegistryName().equals("minecraft:air"); + } + + private static boolean treasureAllowed(BlockPos pos) { + boolean airAbove = isAirAbove(pos); + boolean allowedBlockType = isAllowedBlockType(pos); + return isKnownOffset(pos) || (airAbove && allowedBlockType); + } + + static private String getDiagnosticMessage() { + StringBuilder diagsMessage = new StringBuilder(); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Mines Center: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((minesCenter.equals(Vec3i.NULL_VECTOR)) ? "" : minesCenter.toString()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Current Solution State: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(currentState.name()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Previous Solution State: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(previousState.name()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Previous Player Position: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Previous Distance To Treasure: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((prevDistToTreasure == 0) ? "" : prevDistToTreasure); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Current Possible Blocks: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(possibleBlocks.size()); + diagsMessage.append(getFriendlyBlockPositions(possibleBlocks)); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Evaluated player positions: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(evaluatedPlayerPositions.size()); + diagsMessage.append(getFriendlyEvaluatedPositions()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Chest locations not on known list:\n"); + diagsMessage.append(EnumChatFormatting.WHITE); + if (minesCenter != Vec3i.NULL_VECTOR) { + HashSet locationsNotOnKnownList = openedChestPositions + .stream() + .filter(block -> !knownChestOffsets.contains(block.subtract(minesCenter).toLong())) + .map(block -> block.subtract(minesCenter)) + .collect(Collectors.toCollection(HashSet::new)); + if (locationsNotOnKnownList.size() > 0) { + for (BlockPos blockPos : locationsNotOnKnownList) { + diagsMessage.append(String.format( + "%dL,\t\t// x=%d, y=%d, z=%d", + blockPos.toLong(), + blockPos.getX(), + blockPos.getY(), + blockPos.getZ() + )); + } + } + } else { + diagsMessage.append(""); + } + + return diagsMessage.toString(); + } + + public static void logDiagnosticData(boolean outputAlways) { + if (!SBInfo.getInstance().checkForSkyblockLocation()) { + return; + } + + if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) + { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Metal Detector Solver is not enabled.")); + return; + } + + boolean metalDebugFlagSet = NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL); + if (outputAlways || metalDebugFlagSet) { + NEUDebugLogger.logAlways(getDiagnosticMessage()); + } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java index 25f39c3a..9a950e7f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java @@ -2,27 +2,67 @@ package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.core.util.Line; +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; +import io.github.moulberry.notenoughupdates.options.NEUConfig; import io.github.moulberry.notenoughupdates.options.customtypes.NEUDebugFlag; import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; import io.github.moulberry.notenoughupdates.util.SBInfo; +import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.event.ClickEvent; -import net.minecraft.event.HoverEvent; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; +import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.function.BooleanSupplier; +import java.util.function.LongSupplier; + public class CrystalWishingCompassSolver { + enum SolverState { + NOT_STARTED, + PROCESSING_FIRST_USE, + NEED_SECOND_COMPASS, + PROCESSING_SECOND_USE, + SOLVED, + FAILED_EXCEPTION, + FAILED_TIMEOUT_NO_REPEATING, + FAILED_TIMEOUT_NO_PARTICLES, + FAILED_INTERSECTION_CALCULATION, + FAILED_INVALID_SOLUTION, + } + + enum CompassTarget { + GOBLIN_QUEEN, + GOBLIN_KING, + BAL, + JUNGLE_TEMPLE, + ODAWA, + PRECURSOR_CITY, + MINES_OF_DIVAN, + CRYSTAL_NUCLEUS, + } + + enum Crystal { + AMBER, + AMETHYST, + JADE, + SAPPHIRE, + TOPAZ, + } + private static final CrystalWishingCompassSolver INSTANCE = new CrystalWishingCompassSolver(); public static CrystalWishingCompassSolver getInstance() { return INSTANCE; @@ -31,40 +71,72 @@ public class CrystalWishingCompassSolver { private static final Minecraft mc = Minecraft.getMinecraft(); private static boolean isSkytilsPresent = false; - // Crystal Nucleus unbreakable blocks, area coordinates reported by Hypixel server are slightly different - private static final AxisAlignedBB NUCLEUS_BB = new AxisAlignedBB(463, 63, 460, 563, 181, 564); - private static final double MAX_COMPASS_PARTICLE_SPREAD = 16; - - private static BlockPos prevPlayerPos; - private long compassUsedMillis = 0; - private Vec3 firstParticle = null; - private Vec3 lastParticle = null; - private double lastParticleDistanceFromFirst = 0; - private Line firstCompassLine = null; - private Line secondCompassLine = null; - private Vec3 solution = null; - private Line solutionIntersectionLine = null; - - private void resetForNewCompass() { - compassUsedMillis = 0; - firstParticle = null; - lastParticle = null; - lastParticleDistanceFromFirst = 0; + // NOTE: There is a small set of breakable blocks above the nucleus at Y > 181. While this zone is reported + // as the Crystal Nucleus by Hypixel, for wishing compass purposes it is in the appropriate quadrant. + private static final AxisAlignedBB NUCLEUS_BB = new AxisAlignedBB(462, 63, 461, 564, 181, 565); + private static final AxisAlignedBB HOLLOWS_BB = new AxisAlignedBB(201, 30, 201, 824, 189, 824); + private static final AxisAlignedBB PRECURSOR_REMNANTS_BB = new AxisAlignedBB(513, 64, 513, 824, 189, 824); + private static final AxisAlignedBB MITHRIL_DEPOSITS_BB = new AxisAlignedBB(513, 64, 201, 824, 189, 512); + private static final AxisAlignedBB GOBLIN_HOLDOUT_BB = new AxisAlignedBB(201, 64, 513, 512, 189, 824); + private static final AxisAlignedBB JUNGLE_BB = new AxisAlignedBB(201, 64, 201, 512, 189, 512); + private static final AxisAlignedBB MAGMA_FIELDS_BB = new AxisAlignedBB(201, 30, 201, 824, 63, 824); + private static final double MAX_DISTANCE_BETWEEN_PARTICLES = 0.6; + private static final double MAX_DISTANCE_FROM_USE_TO_FIRST_PARTICLE = 9.0; + + // 64.0 is an arbitrary value but seems to work well + private static final double MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES = 64.0; + + // All particles typically arrive in < 3500, so 5000 should be enough buffer + public static final long ALL_PARTICLES_MAX_MILLIS = 5000L; + + public LongSupplier currentTimeMillis = System::currentTimeMillis; + public BooleanSupplier kingsScentPresent = this::isKingsScentPresent; + public BooleanSupplier keyInInventory = this::isKeyInInventory; + public interface CrystalEnumSetSupplier { + EnumSet getAsCrystalEnumSet(); + } + public CrystalEnumSetSupplier foundCrystals = this::getFoundCrystals; + + private SolverState solverState; + private Compass firstCompass; + private Compass secondCompass; + private Line solutionIntersectionLine; + private EnumSet possibleTargets; + private Vec3Comparable solution; + private Vec3Comparable originalSolution; + private EnumSet solutionPossibleTargets; + + public SolverState getSolverState() { + return solverState; + } + + public Vec3i getSolutionCoords() { + return new Vec3i(solution.xCoord, solution.yCoord, solution.zCoord); + } + + public EnumSet getPossibleTargets() { + return possibleTargets; } private void resetForNewTarget() { NEUDebugLogger.log(NEUDebugFlag.WISHING,"Resetting for new target"); - resetForNewCompass(); - firstCompassLine = null; - secondCompassLine = null; + solverState = SolverState.NOT_STARTED; + firstCompass = null; + secondCompass = null; solutionIntersectionLine = null; - prevPlayerPos = null; + possibleTargets = null; solution = null; + originalSolution = null; + solutionPossibleTargets = null; + } + + public void initWorld() { + resetForNewTarget(); } @SubscribeEvent public void onWorldLoad(WorldEvent.Unload event) { - resetForNewTarget(); + initWorld(); isSkytilsPresent = Loader.isModLoaded("skytils"); } @@ -90,28 +162,101 @@ public class CrystalWishingCompassSolver { return; } - try { - if (isSolved()) { - resetForNewTarget(); - } + BlockPos playerPos = mc.thePlayer.getPosition().getImmutable(); - // 64.0 is an arbitrary value but seems to work well - if (prevPlayerPos != null && prevPlayerPos.distanceSq(mc.thePlayer.getPosition()) < 64.0) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Move a little further before using the wishing compass again.")); - event.setCanceled(true); - return; + try { + HandleCompassResult result = handleCompassUse(playerPos); + switch (result) { + case SUCCESS: + return; + case STILL_PROCESSING_PRIOR_USE: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Wait a little longer before using the wishing compass again.")); + event.setCanceled(true); + break; + case LOCATION_TOO_CLOSE: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Move a little further before using the wishing compass again.")); + event.setCanceled(true); + break; + case POSSIBLE_TARGETS_CHANGED: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Possible wishing compass targets have changed. Solver has been reset.")); + event.setCanceled(true); + break; + case NO_PARTICLES_FOR_PREVIOUS_COMPASS: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] No particles detected for prior compass use. Need another position to solve.")); + break; + case PLAYER_IN_NUCLEUS: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Wishing compass must be used outside the nucleus for accurate results.")); + event.setCanceled(true); + break; + default: + throw new IllegalStateException("Unexpected wishing compass solver state: \n" + getDiagnosticMessage()); } - - prevPlayerPos = mc.thePlayer.getPosition().getImmutable(); - compassUsedMillis = System.currentTimeMillis(); } catch (Exception e) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Error processing wishing compass action - see log for details")); e.printStackTrace(); + event.setCanceled(true); + solverState = SolverState.FAILED_EXCEPTION; } } + public HandleCompassResult handleCompassUse(BlockPos playerPos) { + long lastCompassUsedMillis = 0; + switch (solverState) { + case PROCESSING_SECOND_USE: + if (secondCompass != null) { + lastCompassUsedMillis = secondCompass.whenUsedMillis; + } + case PROCESSING_FIRST_USE: + if (lastCompassUsedMillis == 0 && firstCompass != null) { + lastCompassUsedMillis = firstCompass.whenUsedMillis; + } + if (lastCompassUsedMillis != 0 && + (currentTimeMillis.getAsLong() > lastCompassUsedMillis + ALL_PARTICLES_MAX_MILLIS)) { + return HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; + } + + return HandleCompassResult.STILL_PROCESSING_PRIOR_USE; + case SOLVED: + case FAILED_EXCEPTION: + case FAILED_TIMEOUT_NO_REPEATING: + case FAILED_TIMEOUT_NO_PARTICLES: + case FAILED_INTERSECTION_CALCULATION: + case FAILED_INVALID_SOLUTION: + resetForNewTarget(); + // falls through, NOT_STARTED is the state when resetForNewTarget returns + case NOT_STARTED: + if (NUCLEUS_BB.isVecInside(new Vec3Comparable(playerPos.getX(), playerPos.getY(), playerPos.getZ()))) { + return HandleCompassResult.PLAYER_IN_NUCLEUS; + } + + firstCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); + solverState = SolverState.PROCESSING_FIRST_USE; + possibleTargets = calculatePossibleTargets(playerPos); + return HandleCompassResult.SUCCESS; + case NEED_SECOND_COMPASS: + if (firstCompass.whereUsed.distanceSq(playerPos) < MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES) { + return HandleCompassResult.LOCATION_TOO_CLOSE; + } + + if (!possibleTargets.equals(calculatePossibleTargets(playerPos))) { + resetForNewTarget(); + return HandleCompassResult.POSSIBLE_TARGETS_CHANGED; + } + + secondCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); + solverState = SolverState.PROCESSING_SECOND_USE; + return HandleCompassResult.SUCCESS; + } + + throw new IllegalStateException("Unexpected compass state" ); + } + /* * Processes particles if the wishing compass was used within the last 5 seconds. * @@ -142,188 +287,701 @@ public class CrystalWishingCompassSolver { ) { if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver || particleType != EnumParticleTypes.VILLAGER_HAPPY || - !SBInfo.getInstance().getLocation().equals("crystal_hollows") || - isSolved() || - System.currentTimeMillis() - compassUsedMillis > 5000) { + !SBInfo.getInstance().getLocation().equals("crystal_hollows")) { return; } try { - Vec3 particleVec = new Vec3(x, y, z); - if (firstParticle == null) { - firstParticle = particleVec; - return; + SolverState originalSolverState = solverState; + solveUsingParticle(x, y, z, currentTimeMillis.getAsLong()); + if (solverState != originalSolverState) { + switch (solverState) { + case SOLVED: + showSolution(); + break; + case FAILED_EXCEPTION: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Unable to determine wishing compass target.")); + logDiagnosticData(false); + break; + case FAILED_TIMEOUT_NO_REPEATING: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Timed out waiting for repeat set of compass particles.")); + logDiagnosticData(false); + break; + case FAILED_TIMEOUT_NO_PARTICLES: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Timed out waiting for compass particles.")); + logDiagnosticData(false); + break; + case FAILED_INTERSECTION_CALCULATION: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Unable to determine intersection of wishing compasses.")); + logDiagnosticData(false); + break; + case FAILED_INVALID_SOLUTION: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Failed to find solution.")); + logDiagnosticData(false); + break; + case NEED_SECOND_COMPASS: + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Need another position to determine wishing compass target.")); + break; + } } + } catch (Exception e) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Exception while calculating wishing compass solution - see log for details")); + e.printStackTrace(); + } + } - double distanceFromFirst = particleVec.distanceTo(firstParticle); - if (distanceFromFirst > MAX_COMPASS_PARTICLE_SPREAD) { + /** + * + * @param x Particle x coordinate + * @param y Particle y coordinate + * @param z Particle z coordinate + */ + public void solveUsingParticle(double x, double y, double z, long currentTimeMillis) { + Compass currentCompass; + switch (solverState) { + case PROCESSING_FIRST_USE: + currentCompass = firstCompass; + break; + case PROCESSING_SECOND_USE: + currentCompass = secondCompass; + break; + default: return; - } + } - if (distanceFromFirst >= lastParticleDistanceFromFirst) { - lastParticleDistanceFromFirst = distanceFromFirst; - lastParticle = particleVec; + currentCompass.processParticle(x, y, z, currentTimeMillis); + switch (currentCompass.compassState) { + case FAILED_TIMEOUT_NO_PARTICLES: + solverState = SolverState.FAILED_TIMEOUT_NO_PARTICLES; + return; + case FAILED_TIMEOUT_NO_REPEATING: + solverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; + return; + case WAITING_FOR_FIRST_PARTICLE: + case COMPUTING_LAST_PARTICLE: return; + case COMPLETED: + if (solverState == SolverState.NEED_SECOND_COMPASS) { + return; + } + if (solverState == SolverState.PROCESSING_FIRST_USE) { + solverState = SolverState.NEED_SECOND_COMPASS; + return; + } + break; + } + + // First and Second compasses have completed + solutionIntersectionLine = firstCompass.line.getIntersectionLineSegment(secondCompass.line); + + if (solutionIntersectionLine == null) { + solverState = SolverState.FAILED_INTERSECTION_CALCULATION; + return; + } + + solution = new Vec3Comparable(solutionIntersectionLine.getMidpoint()); + + Vec3Comparable firstDirection = firstCompass.getDirection(); + Vec3Comparable firstSolutionDirection = firstCompass.getDirectionTo(solution); + Vec3Comparable secondDirection = secondCompass.getDirection(); + Vec3Comparable secondSolutionDirection = secondCompass.getDirectionTo(solution); + if (!firstDirection.signumEquals(firstSolutionDirection) || + !secondDirection.signumEquals(secondSolutionDirection) || + !HOLLOWS_BB.isVecInside(solution)) { + solverState = SolverState.FAILED_INVALID_SOLUTION; + return; + } + + solutionPossibleTargets = getSolutionTargets(possibleTargets, solution); + + // Adjust the Jungle Temple solution coordinates + if (solutionPossibleTargets.size() == 1 && + solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE)) { + originalSolution = solution; + solution = solution.addVector(-57, 36, -21); + } + + solverState = SolverState.SOLVED; + } + + private boolean isKeyInInventory() + { + for (ItemStack item : mc.thePlayer.inventory.mainInventory){ + if (item != null && item.getDisplayName().contains("Jungle Key")) { + return true; } + } + return false; + } - // We get here when the second repetition of particles begins. - // Since the second repetition overlaps with the last few particles - // of the first repetition, the last particle we capture isn't truly the last. - // But that's OK since subsequent particles will be on the same line. - Line line = new Line(firstParticle, lastParticle); - if (firstCompassLine == null) { - firstCompassLine = line; - resetForNewCompass(); - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Need another position to determine wishing compass target.")); - return; + private boolean isKingsScentPresent() + { + return SBInfo.getInstance().footer.getUnformattedText().contains("King's Scent I"); + } + + private EnumSet getFoundCrystals() { + EnumSet foundCrystals = EnumSet.noneOf(Crystal.class); + NEUConfig.HiddenProfileSpecific perProfileConfig = NotEnoughUpdates.INSTANCE.config.getProfileSpecific(); + if (perProfileConfig == null) return foundCrystals; + HashMap crystals = perProfileConfig.crystals; + for (String crystalName : crystals.keySet()) { + Integer crystalState = crystals.get(crystalName); + if (crystalState != null && crystalState > 0) { + foundCrystals.add(Crystal.valueOf(crystalName.toUpperCase())); } + } - secondCompassLine = line; - solutionIntersectionLine = firstCompassLine.getIntersectionLineSegment(secondCompassLine); - if (solutionIntersectionLine == null) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Unable to determine wishing compass target.")); - logDiagnosticData(false); - return; + return foundCrystals; + } + + // Returns candidates based on seen Y coordinates and quadrants that + // are not adjacent to the solution's quadrant. If the solution is + // the nucleus then a copy of the original possible targets is + // returned. + // + // NOTE: Adjacent quadrant filtering could be improved based on + // structure sizes in the future to only allow a certain + // distance into the adjacent quadrant. + // + // |----------|------------| + // | Jungle | Mithril | + // | | Deposits | + // |----------|----------- | + // | Goblin | Precursor | + // | Holdout | Deposits | + // |----------|------------| + static public EnumSet getSolutionTargets( + EnumSet possibleTargets, + Vec3Comparable solution) { + EnumSet solutionPossibleTargets; + solutionPossibleTargets = possibleTargets.clone(); + + if (NUCLEUS_BB.isVecInside(solution)) { + return solutionPossibleTargets; + } + + solutionPossibleTargets.remove(CompassTarget.CRYSTAL_NUCLEUS); + + // Eliminate non-adjacent zones first + if (MITHRIL_DEPOSITS_BB.isVecInside(solution)) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); + solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); + } else if (PRECURSOR_REMNANTS_BB.isVecInside(solution)) { + solutionPossibleTargets.remove(CompassTarget.ODAWA); + solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); + } else if (GOBLIN_HOLDOUT_BB.isVecInside(solution)) { + solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); + } else if (JUNGLE_BB.isVecInside(solution)) { + solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); + } + + // If there's only 1 possible target then don't remove based + // on Y coordinates since assumptions about Y coordinates could + // be wrong. + if (solutionPossibleTargets.size() > 1) { + // Y coordinates are 43-70 from 11 samples + if (solutionPossibleTargets.contains(CompassTarget.BAL) && + solution.yCoord > 72) { + solutionPossibleTargets.remove(CompassTarget.BAL); } - solution = solutionIntersectionLine.getMidpoint(); + // Y coordinates are 93-157 from 10 samples, may be able to filter + // more based on the offset of the King within the structure + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && + solution.yCoord < 64) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); + } - if (solution.distanceTo(firstParticle) < 8) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] WARNING: Solution is likely incorrect.")); - logDiagnosticData(false); - return; + // Y coordinates are 129-139 from 10 samples + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && + (solution.yCoord < 127 || solution.yCoord > 141)) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); } - showSolution(); - } catch (Exception e) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Exception while calculating wishing compass solution - see log for details")); - e.printStackTrace(); + // Y coordinates are 72-80 from 10 samples + if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && + (solution.yCoord < 70 || solution.yCoord > 82)) { + solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); + } + + // Y coordinates are 110-128 from 3 samples, not enough data to use + if (solutionPossibleTargets.contains(CompassTarget.ODAWA) && + solution.yCoord < 64) { + solutionPossibleTargets.remove(CompassTarget.ODAWA); + } + + // Y coordinates are 122-129 from 8 samples + if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && + (solution.yCoord < 119 || solution.yCoord > 132)) { + solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); + } + + // Y coordinates are 98-102 from 15 samples + if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && + (solution.yCoord < 96 || solution.yCoord > 104)) { + solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); + } } + + return solutionPossibleTargets; } - private boolean isSolved() { - return solution != null; + private EnumSet calculatePossibleTargets(BlockPos playerPos) { + boolean targetsBasedOnZoneWithoutCrystal = false; + EnumSet candidateTargets = EnumSet.allOf(CompassTarget.class); + EnumSet foundCrystals = this.foundCrystals.getAsCrystalEnumSet(); + Vec3Comparable playerPosVec = new Vec3Comparable(playerPos); + + // If the current zone's crystal hasn't been found then remove all non-nucleus candidates other + // than the ones in the current zone. The one exception is that the king is kept when in the jungle + // since the compass can point to the king if odawa is missing (which often happens). + // The nucleus is kept since it can be returned if the structure for the current zone is missing. + if (GOBLIN_HOLDOUT_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMBER)) { + candidateTargets.clear(); + candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); + candidateTargets.add(CompassTarget.GOBLIN_KING); + candidateTargets.add(CompassTarget.GOBLIN_QUEEN); + targetsBasedOnZoneWithoutCrystal = true; + } + + if (JUNGLE_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMETHYST)) { + candidateTargets.clear(); + candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); + candidateTargets.add(CompassTarget.ODAWA); + candidateTargets.add(CompassTarget.JUNGLE_TEMPLE); + if (!keyInInventory.getAsBoolean() && !kingsScentPresent.getAsBoolean()) { + // If Odawa is missing then the king may be returned + candidateTargets.add(CompassTarget.GOBLIN_KING); + } + targetsBasedOnZoneWithoutCrystal = true; + } + + if (MITHRIL_DEPOSITS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.JADE)) { + candidateTargets.clear(); + candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); + candidateTargets.add(CompassTarget.MINES_OF_DIVAN); + targetsBasedOnZoneWithoutCrystal = true; + } + + if (PRECURSOR_REMNANTS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.SAPPHIRE)) { + candidateTargets.clear(); + candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); + candidateTargets.add(CompassTarget.PRECURSOR_CITY); + targetsBasedOnZoneWithoutCrystal = true; + } + + if (MAGMA_FIELDS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.TOPAZ)) { + candidateTargets.clear(); + candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); + candidateTargets.add(CompassTarget.BAL); + targetsBasedOnZoneWithoutCrystal = true; + } + + if (!targetsBasedOnZoneWithoutCrystal) { + // Filter out crystal-based targets outside the current zone + if (foundCrystals.contains(Crystal.AMBER)) { + candidateTargets.remove(CompassTarget.GOBLIN_KING); + candidateTargets.remove(CompassTarget.GOBLIN_QUEEN); + } + + if (foundCrystals.contains(Crystal.AMETHYST)) { + candidateTargets.remove(CompassTarget.ODAWA); + candidateTargets.remove(CompassTarget.JUNGLE_TEMPLE); + } + + if (foundCrystals.contains(Crystal.JADE)) { + candidateTargets.remove(CompassTarget.MINES_OF_DIVAN); + } + + if (foundCrystals.contains(Crystal.TOPAZ)) { + candidateTargets.remove(CompassTarget.BAL); + } + + if (foundCrystals.contains(Crystal.SAPPHIRE)) { + candidateTargets.remove(CompassTarget.PRECURSOR_CITY); + } + } + + candidateTargets.remove(kingsScentPresent.getAsBoolean() ? CompassTarget.GOBLIN_KING : CompassTarget.GOBLIN_QUEEN); + candidateTargets.remove(keyInInventory.getAsBoolean() ? CompassTarget.ODAWA : CompassTarget.JUNGLE_TEMPLE); + + return candidateTargets; } - private void showSolution() { - if (solution == null) return; - String description = "[NEU] Wishing compass target: "; - String coordsText = String.format("%.0f %.0f %.0f", - solution.xCoord, - solution.yCoord, - solution.zCoord); + private String getFriendlyNameForCompassTarget(CompassTarget compassTarget) { + switch (compassTarget) { + case BAL: return EnumChatFormatting.RED + "Bal"; + case ODAWA: return EnumChatFormatting.GREEN + "Odawa"; + case JUNGLE_TEMPLE: return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.GREEN + "Jungle Temple"; + case GOBLIN_KING: return EnumChatFormatting.GOLD + "King Yolkar"; + case GOBLIN_QUEEN: return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.YELLOW + "Goblin Queen"; + case PRECURSOR_CITY: return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.WHITE + "Precursor City"; + case MINES_OF_DIVAN: return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.BLUE + "Mines of Divan"; + default: return EnumChatFormatting.WHITE + "an undetermined location"; + } + } - if (NUCLEUS_BB.isVecInside(solution)) { - description += "Crystal Nucleus (" + coordsText + ")"; - } else { - description += coordsText; + private String getNameForCompassTarget(CompassTarget compassTarget) { + boolean useSkytilsNames = (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassWaypointNameType == 1); + switch (compassTarget) { + case BAL: return useSkytilsNames ? "internal_bal" : "Bal"; + case ODAWA: return "Odawa"; + case JUNGLE_TEMPLE: return useSkytilsNames ? "internal_temple" : "Temple"; + case GOBLIN_KING: return useSkytilsNames ? "internal_king" : "King"; + case GOBLIN_QUEEN: return useSkytilsNames ? "internal_den" : "Queen"; + case PRECURSOR_CITY: return useSkytilsNames ? "internal_city" : "City"; + case MINES_OF_DIVAN: return useSkytilsNames ? "internal_mines" : "Mines"; + default: return "WishingTarget"; } + } - ChatComponentText message = new ChatComponentText(EnumChatFormatting.YELLOW + description); + private String getSolutionCoordsText() { + return solution == null ? "" : + String.format("%.0f %.0f %.0f", solution.xCoord, solution.yCoord, solution.zCoord); + } - if (isSkytilsPresent) { - ChatStyle clickEvent = new ChatStyle().setChatClickEvent( - new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sthw add WishingTarget " + coordsText)); - clickEvent.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ChatComponentText( - EnumChatFormatting.YELLOW + - "Add Skytils hollows waypoint"))); - message.setChatStyle(clickEvent); + private String getWishingCompassDestinationsMessage() { + StringBuilder sb = new StringBuilder(); + sb.append(EnumChatFormatting.YELLOW); + sb.append("[NEU] "); + sb.append(EnumChatFormatting.AQUA); + sb.append("Wishing compass points to "); + int index = 1; + for (CompassTarget target : solutionPossibleTargets) { + if (index > 1) { + sb.append(EnumChatFormatting.AQUA); + if (index == solutionPossibleTargets.size()) { + sb.append(" or "); + } else { + sb.append(", "); + } + } + sb.append(getFriendlyNameForCompassTarget(target)); + index++; } - Minecraft.getMinecraft().thePlayer.addChatMessage(message); + sb.append(EnumChatFormatting.AQUA); + sb.append(" ("); + sb.append(getSolutionCoordsText()); + sb.append(")"); + return sb.toString(); } - public void logDiagnosticData(boolean outputAlways) { - if (SBInfo.getInstance().getLocation() == null) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] This command is not available outside SkyBlock")); + private void showSolution() { + if (solution == null) return; + + if (NUCLEUS_BB.isVecInside(solution)) { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] " + + EnumChatFormatting.AQUA + "Wishing compass target is the Crystal Nucleus")); return; } - if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) - { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + - "[NEU] Wishing Compass Solver is not enabled.")); + String destinationMessage = getWishingCompassDestinationsMessage(); + + if (!isSkytilsPresent) { + mc.thePlayer.addChatMessage(new ChatComponentText(destinationMessage)); return; } - if (!outputAlways && !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.WISHING)) { - return; + String targetNameForSkytils = solutionPossibleTargets.size() == 1 ? + getNameForCompassTarget(solutionPossibleTargets.iterator().next()) : + "WishingTarget"; + String skytilsCommand = String.format("/sthw add %s %s", targetNameForSkytils, getSolutionCoordsText()); + if (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassAutocreateKnownWaypoints && + solutionPossibleTargets.size() == 1) { + mc.thePlayer.addChatMessage(new ChatComponentText(destinationMessage)); + int commandResult = ClientCommandHandler.instance.executeCommand(mc.thePlayer, skytilsCommand); + if (commandResult == 1) + { + return; + } + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Failed to automatically run /sthw")); } - boolean originalDebugFlag = !NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.add(NEUDebugFlag.WISHING); + destinationMessage += EnumChatFormatting.YELLOW + " [Add Skytils Waypoint]"; + ChatComponentText chatMessage = new ChatComponentText(destinationMessage); + chatMessage.setChatStyle(Utils.createClickStyle(ClickEvent.Action.RUN_COMMAND, + skytilsCommand, + EnumChatFormatting.YELLOW + "Set waypoint for wishing target\n")); + mc.thePlayer.addChatMessage(chatMessage); + } + private String getDiagnosticMessage() { StringBuilder diagsMessage = new StringBuilder(); - diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Skytils Present: "); + diagsMessage.append("Solver State: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(isSkytilsPresent); + diagsMessage.append(solverState.name()); diagsMessage.append("\n"); - diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Compass Used Millis: "); - diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(compassUsedMillis); - diagsMessage.append("\n"); + if (firstCompass == null) { + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("First Compass: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(""); + diagsMessage.append("\n"); + } else { + firstCompass.appendCompassDiagnostics(diagsMessage, "First Compass"); + } + + if (secondCompass == null) { + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Second Compass: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(""); + diagsMessage.append("\n"); + } else { + secondCompass.appendCompassDiagnostics(diagsMessage, "Second Compass"); + } diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Compass Used Position: "); + diagsMessage.append("Intersection Line: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((prevPlayerPos == null) ? "" : prevPlayerPos.toString()); + diagsMessage.append((solutionIntersectionLine == null) ? "" : solutionIntersectionLine); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("First Particle: "); + diagsMessage.append("Jungle Key in Inventory: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((firstParticle == null) ? "" : firstParticle.toString()); + diagsMessage.append(isKeyInInventory()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Last Particle: "); + diagsMessage.append("King's Scent Present: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((lastParticle == null) ? "" : lastParticle.toString()); + diagsMessage.append(isKingsScentPresent()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Last Particle Distance From First: "); + diagsMessage.append("First Compass Targets: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append(lastParticleDistanceFromFirst); + diagsMessage.append(possibleTargets == null ? "" : possibleTargets.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("First Compass Line: "); + diagsMessage.append("Current Calculated Targets: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((firstCompassLine == null) ? "" : firstCompassLine.toString()); + diagsMessage.append(calculatePossibleTargets(mc.thePlayer.getPosition())); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Second Compass Line: "); + diagsMessage.append("Found Crystals: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((secondCompassLine == null) ? "" : secondCompassLine.toString()); + diagsMessage.append(getFoundCrystals()); diagsMessage.append("\n"); + if (originalSolution != null) { + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Original Solution: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(originalSolution); + diagsMessage.append("\n"); + } + diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Intersection Line: "); + diagsMessage.append("Solution: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((secondCompassLine == null) ? "" : solutionIntersectionLine); + diagsMessage.append((solution == null) ? "" : solution.toString()); diagsMessage.append("\n"); diagsMessage.append(EnumChatFormatting.AQUA); - diagsMessage.append("Solution: "); + diagsMessage.append("Solution Targets: "); diagsMessage.append(EnumChatFormatting.WHITE); - diagsMessage.append((solution == null) ? "" : solution.toString()); + diagsMessage.append((solutionPossibleTargets == null) ? "" : solutionPossibleTargets.toString()); diagsMessage.append("\n"); - NEUDebugLogger.log(NEUDebugFlag.WISHING, diagsMessage.toString()); + return diagsMessage.toString(); + } + + public void logDiagnosticData(boolean outputAlways) { + if (!SBInfo.getInstance().checkForSkyblockLocation()) { + return; + } - if (!originalDebugFlag) { - NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.remove(NEUDebugFlag.WISHING); + if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) + { + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] Wishing Compass Solver is not enabled.")); + return; + } + + boolean wishingDebugFlagSet = NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.WISHING); + if (outputAlways || wishingDebugFlagSet) { + NEUDebugLogger.logAlways(getDiagnosticMessage()); + } + } + + enum CompassState { + WAITING_FOR_FIRST_PARTICLE, + COMPUTING_LAST_PARTICLE, + COMPLETED, + FAILED_TIMEOUT_NO_REPEATING, + FAILED_TIMEOUT_NO_PARTICLES, + } + + enum HandleCompassResult { + SUCCESS, + LOCATION_TOO_CLOSE, + STILL_PROCESSING_PRIOR_USE, + POSSIBLE_TARGETS_CHANGED, + NO_PARTICLES_FOR_PREVIOUS_COMPASS, + PLAYER_IN_NUCLEUS + } + + static class Compass { + public CompassState compassState; + public Line line = null; + + private final BlockPos whereUsed; + private final long whenUsedMillis; + private Vec3Comparable firstParticle = null; + private Vec3Comparable previousParticle = null; + private Vec3Comparable lastParticle = null; + private final ArrayList processedParticles; + + Compass(BlockPos whereUsed, long whenUsedMillis) { + this.whereUsed = whereUsed; + this.whenUsedMillis = whenUsedMillis; + compassState = CompassState.WAITING_FOR_FIRST_PARTICLE; + processedParticles = new ArrayList<>(); + } + + public Vec3Comparable getDirection() { + if (firstParticle == null || lastParticle == null) { + return null; + } + + return new Vec3Comparable(firstParticle.subtractReverse(lastParticle).normalize()); + } + + public Vec3Comparable getDirectionTo(Vec3Comparable target) { + if (firstParticle == null || target == null) { + return null; + } + + return new Vec3Comparable(firstParticle.subtractReverse(target).normalize()); + } + + public double particleSpread() { + if (firstParticle == null || lastParticle == null) { + return 0.0; + } + return firstParticle.distanceTo(lastParticle); + } + + public void processParticle(double x, double y, double z, long particleTimeMillis) { + if (compassState == CompassState.FAILED_TIMEOUT_NO_REPEATING || + compassState == CompassState.FAILED_TIMEOUT_NO_PARTICLES || + compassState == CompassState.COMPLETED) { + throw new UnsupportedOperationException("processParticle should not be called in a failed or completed state"); + } + + if (particleTimeMillis - this.whenUsedMillis > ALL_PARTICLES_MAX_MILLIS) { + // Assume we have failed if we're still trying to process particles + compassState = CompassState.FAILED_TIMEOUT_NO_REPEATING; + return; + } + + Vec3Comparable currentParticle = new Vec3Comparable(x, y, z); + if (compassState == CompassState.WAITING_FOR_FIRST_PARTICLE) { + if (currentParticle.distanceTo(new Vec3Comparable(whereUsed)) < MAX_DISTANCE_FROM_USE_TO_FIRST_PARTICLE) { + processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); + firstParticle = currentParticle; + previousParticle = currentParticle; + compassState = CompassState.COMPUTING_LAST_PARTICLE; + } + return; + } + + // State is COMPUTING_LAST_PARTICLE, keep updating the previousParticle until + // the first particle in the second sequence is seen. + if (currentParticle.distanceTo(previousParticle) <= MAX_DISTANCE_BETWEEN_PARTICLES) { + processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); + previousParticle = currentParticle; + return; + } + + if (currentParticle.distanceTo(firstParticle) > MAX_DISTANCE_BETWEEN_PARTICLES) { + return; + } + + // It's a repeating particle + processedParticles.add(new ProcessedParticle(currentParticle, particleTimeMillis)); + lastParticle = previousParticle; + line = new Line(firstParticle, lastParticle); + compassState = CompassState.COMPLETED; + } + + public void appendCompassDiagnostics(StringBuilder diagsMessage, String compassName) { + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Compass State: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(compassState.name()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append(compassName); + diagsMessage.append(" Used Millis: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(whenUsedMillis); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append(compassName); + diagsMessage.append(" Used Position: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((whereUsed == null) ? "" : whereUsed.toString()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append(compassName); + diagsMessage.append(" All Seen Particles: \n"); + diagsMessage.append(EnumChatFormatting.WHITE); + for (ProcessedParticle particle : processedParticles) { + diagsMessage.append(particle.toString()); + diagsMessage.append("\n"); + } + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append(compassName); + diagsMessage.append(" Particle Spread: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(particleSpread()); + diagsMessage.append("\n"); + + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append(compassName); + diagsMessage.append(" Compass Line: "); + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append((line == null) ? "" : line.toString()); + diagsMessage.append("\n"); + } + + static class ProcessedParticle { + Vec3Comparable coords; + long particleTimeMillis; + + ProcessedParticle(Vec3Comparable coords, long particleTimeMillis) { + this.coords = coords; + this.particleTimeMillis = particleTimeMillis; + } + + @Override + public String toString() { + return coords.toString() + " " + particleTimeMillis; + } } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java index 6cfb8c04..f793baf0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java @@ -641,6 +641,42 @@ public class Mining { @ConfigAccordionId(id = 6) public int crystalHollowNoneColor = 12; + @ConfigOption( + name = "Wishing Compass Solver", + desc = "" + ) + @ConfigEditorAccordion(id = 7) + public boolean wishingCompassSolverAccordion = false; + + @Expose + @ConfigOption( + name = "Enable Solver", + desc = "Show wishing compass target coordinates based on two samples" + ) + @ConfigAccordionId(id = 7) + @ConfigEditorBoolean + public boolean wishingCompassSolver = true; + + @Expose + @ConfigOption( + name = "Skytils Waypoints", + desc = "Automatically create Skytils waypoints for well-known targets" + ) + @ConfigAccordionId(id = 7) + @ConfigEditorBoolean + public boolean wishingCompassAutocreateKnownWaypoints = false; + + @Expose + @ConfigOption( + name = "Waypoint Type", + desc = "Skytils Waypoint name type. Skytils Built-in will be overwritten by Skytils when the waypoint is nearby." + ) + @ConfigAccordionId(id = 7) + @ConfigEditorDropdown( + values = {"NEU", "Skytils"} + ) + public int wishingCompassWaypointNameType = 0; + @Expose @ConfigOption( name = "Puzzler Solver", @@ -665,19 +701,11 @@ public class Mining { @ConfigEditorBoolean public boolean titaniumAlertMustBeVisible = false; - @Expose - @ConfigOption( - name = "Wishing Compass Solver", - desc = "Show wishing compass target coordinates based on two samples" - ) - @ConfigEditorBoolean - public boolean wishingCompassSolver = true; - @ConfigOption( name = "Custom Textures", desc = "" ) - @ConfigEditorAccordion(id = 7) + @ConfigEditorAccordion(id = 8) public boolean texturesAccordion = false; @Expose @@ -685,7 +713,7 @@ public class Mining { name = "Dwarven Mines Textures", desc = "Allows texture packs to retexture blocks in the Dwarven Mines. If you don't have a texture pack that does this, you should leave this off" ) - @ConfigAccordionId(id = 7) + @ConfigAccordionId(id = 8) @ConfigEditorBoolean public boolean dwarvenTextures = false; @Expose @@ -693,7 +721,7 @@ public class Mining { name = "Crystal Hollows Textures", desc = "Allows texture packs to retexture blocks in the Crystal Hollows. If you don't have a texture pack that does this, you should leave this off" ) - @ConfigAccordionId(id = 7) + @ConfigAccordionId(id = 8) @ConfigEditorBoolean public boolean crystalHollowTextures = false; @@ -702,7 +730,7 @@ public class Mining { name = "Replace Gemstone sounds", desc = "Replace the break sounds of crystals in the Crystal Hollows. Requires a texture pack with this feature" ) - @ConfigAccordionId(id = 7) + @ConfigAccordionId(id = 8) @ConfigEditorBoolean public boolean gemstoneSounds = false; @@ -711,7 +739,7 @@ public class Mining { name = "Replace Mithril sounds", desc = "Replace the break sounds of mithril and titanium in the Dwarven mines. Requires a texture pack with this feature" ) - @ConfigAccordionId(id = 7) + @ConfigAccordionId(id = 8) @ConfigEditorBoolean public boolean mithrilSounds = false; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java index d662a872..827a3e97 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java @@ -13,6 +13,8 @@ import java.util.function.Consumer; public class NEUDebugLogger { private static final Minecraft mc = Minecraft.getMinecraft(); public static Consumer logMethod = NEUDebugLogger::chatLogger; + // Used to prevent accessing NEUConfig in unit tests + public static boolean allFlagsEnabled = false; private static void chatLogger(String message) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU DEBUG] " + message)); @@ -23,7 +25,13 @@ public class NEUDebugLogger { } public static void log(NEUDebugFlag flag, String message) { - if (logMethod != null && isFlagEnabled(flag)) { + if (logMethod != null && (allFlagsEnabled || isFlagEnabled(flag))) { + logAlways(message); + } + } + + public static void logAlways(String message) { + if (logMethod != null) { logMethod.accept(message); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java index 95a3539a..f1e40671 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java @@ -18,6 +18,8 @@ import net.minecraft.scoreboard.Score; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.GuiOpenEvent; @@ -57,7 +59,7 @@ public class SBInfo { public String slayer = ""; public boolean stranded = false; - public String mode = ""; + public String mode = null; public Date currentTimeDate = null; @@ -120,6 +122,16 @@ public class SBInfo { } } + public boolean checkForSkyblockLocation() { + if (!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() || getLocation() == null) { + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "[NEU] This command is not available outside SkyBlock")); + return false; + } + + return true; + } + private static final Pattern PROFILE_PATTERN = Pattern.compile("(?(♲ Ironman)|(☀ Stranded)|()) *Profile: (?[^ ]+)"); diff --git a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java new file mode 100644 index 00000000..c0b451e3 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java @@ -0,0 +1,193 @@ +package io.github.moulberry.notenoughupdates.core.util; + +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class Vec3ComparableTest { + @Test + void equals_false_when_null() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c.equals(null); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_true_when_same_object() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c.equals(vec3c); + + // Assert + assertTrue(areEqual); + } + + @Test + void equals_true_when_same_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertTrue(areEqual); + } + + @Test + void equals_false_when_vec3_equals() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3 vec3c2 = new Vec3(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_false_when_different_object_type() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + BlockPos blockPos = new BlockPos(1.0, 2.0, 3.0); + + // Act + boolean areEqual = vec3c1.equals(blockPos); + + // Assert + assertFalse(areEqual); + } + + @Test + void equals_false_when_different_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); + + // Act + boolean areEqual = vec3c1.equals(vec3c2); + + // Assert + assertFalse(areEqual); + } + + @Test + void hashCode_same_when_same_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + double vec3c1Hash = vec3c1.hashCode(); + double vec3c2Hash = vec3c2.hashCode(); + + // Assert + assertEquals(vec3c1Hash, vec3c2Hash); + } + + @Test + void hashCode_different_when_different_value() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(3.0, 2.0, 1.0); + + // Act + double vec3c1Hash = vec3c1.hashCode(); + double vec3c2Hash = vec3c2.hashCode(); + + // Assert + assertNotEquals(vec3c1Hash, vec3c2Hash); + } + + @Test + void compareTo_zero_when_equal() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int result = vec3c1.compareTo(vec3c2); + + // Assert + assertEquals(0, result); + } + + @Test + void compareTo_negative_when_lower() { + // Arrange + Vec3Comparable vec3c1 = new Vec3Comparable(0.0, 2.0, 3.0); + Vec3Comparable vec3c2 = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int result = vec3c1.compareTo(vec3c2); + + // Assert + assertTrue(result < 0); + } + + @Test + void compareTo_positive_when_x_y_or_z_is_higher() { + // Arrange + Vec3Comparable vec3c1x = new Vec3Comparable(2.0, 2.0, 3.0); + Vec3Comparable vec3c2x = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c1y = new Vec3Comparable(1.0, 3.0, 3.0); + Vec3Comparable vec3c2y = new Vec3Comparable(1.0, 2.0, 3.0); + Vec3Comparable vec3c1z = new Vec3Comparable(1.0, 2.0, 4.0); + Vec3Comparable vec3c2z = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act + int resultX = vec3c1x.compareTo(vec3c2x); + int resultY = vec3c1y.compareTo(vec3c2y); + int resultZ = vec3c1z.compareTo(vec3c2z); + + // Assert + assertTrue(resultX > 0); + assertTrue(resultY > 0); + assertTrue(resultZ > 0); + } + + @Test + void compareTo_throws_on_null() { + // Arrange + Vec3Comparable vec3c = new Vec3Comparable(1.0, 2.0, 3.0); + + // Act & Assert + Assertions.assertThrows(NullPointerException.class, () -> { + vec3c.compareTo(null); + }); + } + + @Test + void signumEquals_is_true_when_all_signums_match() { + Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); + Vec3 second = new Vec3(-1.0, 1.0, 0); + Assertions.assertTrue(first.signumEquals(second)); + } + + @Test + void signumEquals_is_false_when_any_signum_differs() { + Vec3Comparable first = new Vec3Comparable(-1.0, 1.0, 0); + Vec3 second = new Vec3(-1.0, 1.0, 1.0); + Vec3 third = new Vec3(-1.0, -1.0, 0); + Vec3 fourth = new Vec3(1.0, 1.0, 1.0); + Assertions.assertFalse(first.signumEquals(second)); + Assertions.assertFalse(first.signumEquals(third)); + Assertions.assertFalse(first.signumEquals(fourth)); + } +} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java new file mode 100644 index 00000000..58233410 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java @@ -0,0 +1,204 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalMetalDetectorSolver.SolutionState; +import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; +import net.minecraft.util.BlockPos; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +import java.util.ArrayList; + +class CrystalMetalDetectorSolverTest { + class Location { + double distance; + Vec3Comparable playerPosition; + SolutionState expectedState; + boolean centerKnown; + + public Location(double distance, + Vec3Comparable playerPosition, + SolutionState expectedState, + boolean centerKnown) { + this.distance = distance; + this.playerPosition = playerPosition; + this.expectedState = expectedState; + this.centerKnown = centerKnown; + } + } + + class Solution { + ArrayList locations = new ArrayList<>(); + BlockPos center = BlockPos.ORIGIN; + BlockPos expectedSolution = BlockPos.ORIGIN; + } + + @BeforeEach + void setUp() { + CrystalMetalDetectorSolver.initWorld(); + CrystalMetalDetectorSolver.treasureAllowedPredicate = blockPos -> true; + NEUDebugLogger.logMethod = CrystalMetalDetectorSolverTest::neuDebugLog; + NEUDebugLogger.allFlagsEnabled = true; + } + + private void findPossibleSolutionsTwice(Location loc, boolean centerNewlyDiscovered) { + // Each location has to be received twice to be valid + CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, centerNewlyDiscovered); + CrystalMetalDetectorSolver.findPossibleSolutions(loc.distance, loc.playerPosition, false); + } + + private void checkSolution(Solution solution) { + boolean centerSet = false; + int index = 0; + for (Location loc : solution.locations) { + if (loc.centerKnown && !centerSet && !solution.center.equals(BlockPos.ORIGIN)) { + CrystalMetalDetectorSolver.setMinesCenter(solution.center); + centerSet = true; + findPossibleSolutionsTwice(loc, true); + } else { + findPossibleSolutionsTwice(loc, false); + } + Assertions.assertEquals(loc.expectedState, + CrystalMetalDetectorSolver.currentState, + "Location index " + index); + index++; + } + + Assertions.assertEquals(solution.expectedSolution, CrystalMetalDetectorSolver.getSolution()); + } + + @Test + void findPossibleSolutions_single_location_sample_is_ignored() { + Location location = new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false); + + CrystalMetalDetectorSolver.findPossibleSolutions(location.distance, location.playerPosition, false); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, + "Previous state"); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.currentState, + "Current state"); + } + + @Test + void findPossibleSolutions_currentState_becomes_previousState() { + Location location = new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false); + + findPossibleSolutionsTwice(location, false); + Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, + "Previous state"); + Assertions.assertEquals(location.expectedState, CrystalMetalDetectorSolver.currentState, + "Current state"); + } + + @Test + void findPossibleSolutions_state_is_invalid_when_solution_and_distance_mismatch() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.expectedSolution = new BlockPos(722, 67, 590); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.FOUND_KNOWN, + true)); + // slightly different player position with invalid distance + solution.locations.add(new Location(4.0, + new Vec3Comparable(757.8235166144441, 69.0, 532.8037800566217), + SolutionState.INVALID, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_failed_when_second_location_eliminates_all_blocks() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.locations.add(new Location(29.4, + new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), + SolutionState.MULTIPLE_KNOWN, + true)); + solution.locations.add(new Location(4.0, // actual distance should be 38.2 + new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), + SolutionState.FAILED, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_found_known_when_center_found_after_location() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.MULTIPLE, + false)); + checkSolution(solution); + + solution.locations.get(0).centerKnown = true; + solution.locations.get(0).expectedState = SolutionState.FOUND_KNOWN; + solution.expectedSolution = new BlockPos(722, 67, 590); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_state_is_found_when_single_known_location() { + Solution solution = new Solution(); + solution.center = new BlockPos(736, 88, 547); + solution.expectedSolution = new BlockPos(722, 67, 590); + solution.locations.add(new Location(67.5, + new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), + SolutionState.FOUND_KNOWN, + true)); + checkSolution(solution); + } + + @Test + void findPossibleSolutions_states_are_correct_using_multiple_locations_with_unknown_center() { + Solution solution = new Solution(); + solution.locations.add(new Location(37.3, + new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), + SolutionState.MULTIPLE, + false)); + solution.locations.add(new Location(34.8, + new Vec3Comparable(782.6999999880791, 71.0, 508.69999998807907), + SolutionState.FOUND, + false)); + solution.expectedSolution = new BlockPos(758, 67, 533); + + checkSolution(solution); + } + + @Test + void findPossibleSolutions_states_are_correct_when_multiple_known_locations_found() { + Solution solution = new Solution(); + + // First, validate that the solution doesn't work without the center + solution.locations.add(new Location(29.4, + new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), + SolutionState.MULTIPLE, + false)); + solution.locations.add(new Location(38.2, + new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), + SolutionState.MULTIPLE, + false)); + checkSolution(solution); + + // Now validate that the solution works with the center + CrystalMetalDetectorSolver.resetSolution(false); + solution.locations.get(0).expectedState = SolutionState.MULTIPLE_KNOWN; + solution.locations.get(0).centerKnown = true; + solution.locations.get(1).expectedState = SolutionState.FOUND_KNOWN; + solution.locations.get(1).centerKnown = true; + solution.expectedSolution = new BlockPos(748, 66, 578); + solution.center = new BlockPos(736, 88, 547); + checkSolution(solution); + } + + private static void neuDebugLog(String message) { + System.out.println(message); + } +} diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java new file mode 100644 index 00000000..ed39a505 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java @@ -0,0 +1,1206 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.CompassTarget; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.HandleCompassResult; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.SolverState; +import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; + +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.*; + +class CrystalWishingCompassSolverTest { + private static final CrystalWishingCompassSolver solver = getInstance(); + long systemTimeMillis; + private final long DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE = 500L; + + private final CompassUse minesOfDivanCompassUse1 = new CompassUse( + 1647528732979L, + new BlockPos(754, 137, 239), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137), + new ParticleSpawn(new Vec3Comparable(754.315735, 138.444351, 239.690521), 45), + new ParticleSpawn(new Vec3Comparable(754.272278, 138.352051, 240.180008), 51), + new ParticleSpawn(new Vec3Comparable(754.228760, 138.259750, 240.669479), 49), + new ParticleSpawn(new Vec3Comparable(754.185303, 138.167435, 241.158966), 57), + new ParticleSpawn(new Vec3Comparable(754.141846, 138.075134, 241.648438), 50), + new ParticleSpawn(new Vec3Comparable(754.098328, 137.982819, 242.137909), 51), + new ParticleSpawn(new Vec3Comparable(754.054871, 137.890518, 242.627396), 57), + new ParticleSpawn(new Vec3Comparable(754.011353, 137.798203, 243.116867), 44), + new ParticleSpawn(new Vec3Comparable(753.967896, 137.705887, 243.606354), 59), + new ParticleSpawn(new Vec3Comparable(753.924438, 137.613586, 244.095825), 35), + new ParticleSpawn(new Vec3Comparable(753.880920, 137.521271, 244.585297), 48), + new ParticleSpawn(new Vec3Comparable(753.837463, 137.428970, 245.074783), 70), + new ParticleSpawn(new Vec3Comparable(753.793945, 137.336655, 245.564255), 33), + new ParticleSpawn(new Vec3Comparable(753.750488, 137.244354, 246.053741), 55), + new ParticleSpawn(new Vec3Comparable(753.707031, 137.152039, 246.543213), 42), + new ParticleSpawn(new Vec3Comparable(753.663513, 137.059738, 247.032700), 56), + new ParticleSpawn(new Vec3Comparable(753.620056, 136.967422, 247.522171), 48), + new ParticleSpawn(new Vec3Comparable(753.576538, 136.875122, 248.011642), 56), + new ParticleSpawn(new Vec3Comparable(754.333618, 138.527710, 239.197800), 55) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse minesOfDivanCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(760, 134, 266), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(759.686951, 135.524994, 266.190704), 129), + new ParticleSpawn(new Vec3Comparable(759.625183, 135.427887, 266.677277), 69), + new ParticleSpawn(new Vec3Comparable(759.561707, 135.330704, 267.163635), 31), + new ParticleSpawn(new Vec3Comparable(759.498230, 135.233536, 267.649963), 115), + new ParticleSpawn(new Vec3Comparable(759.434753, 135.136368, 268.136322), 0), + new ParticleSpawn(new Vec3Comparable(759.371277, 135.039200, 268.622650), 46), + new ParticleSpawn(new Vec3Comparable(759.307800, 134.942017, 269.109009), 49), + new ParticleSpawn(new Vec3Comparable(759.244324, 134.844849, 269.595337), 59), + new ParticleSpawn(new Vec3Comparable(759.180847, 134.747681, 270.081696), 45), + new ParticleSpawn(new Vec3Comparable(759.117371, 134.650513, 270.568024), 39), + new ParticleSpawn(new Vec3Comparable(759.053894, 134.553329, 271.054352), 67), + new ParticleSpawn(new Vec3Comparable(758.990356, 134.456161, 271.540710), 49), + new ParticleSpawn(new Vec3Comparable(758.926880, 134.358994, 272.027039), 32), + new ParticleSpawn(new Vec3Comparable(758.863403, 134.261826, 272.513397), 61), + new ParticleSpawn(new Vec3Comparable(758.799927, 134.164642, 272.999725), 44), + new ParticleSpawn(new Vec3Comparable(758.736450, 134.067474, 273.486084), 48), + new ParticleSpawn(new Vec3Comparable(758.672974, 133.970306, 273.972412), 57), + new ParticleSpawn(new Vec3Comparable(758.609497, 133.873138, 274.458740), 55), + new ParticleSpawn(new Vec3Comparable(758.546021, 133.775955, 274.945099), 59), + new ParticleSpawn(new Vec3Comparable(758.482544, 133.678787, 275.431427), 38), + new ParticleSpawn(new Vec3Comparable(759.636658, 135.522827, 266.186371), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i minesOfDivanSolution = new Vec3i(735, 98, 451); + + private final CompassUse goblinHoldoutCompassUse1 = new CompassUse( + 1647776326763L, + new BlockPos(454, 87, 776), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(454.171722, 88.616852, 775.807190), 188), + new ParticleSpawn(new Vec3Comparable(454.010315, 88.613464, 775.333984), 44), + new ParticleSpawn(new Vec3Comparable(453.849243, 88.610069, 774.860657), 61), + new ParticleSpawn(new Vec3Comparable(453.688141, 88.606674, 774.387329), 51), + new ParticleSpawn(new Vec3Comparable(453.527069, 88.603271, 773.914001), 40), + new ParticleSpawn(new Vec3Comparable(453.365997, 88.599876, 773.440674), 57), + new ParticleSpawn(new Vec3Comparable(453.204926, 88.596481, 772.967346), 45), + new ParticleSpawn(new Vec3Comparable(453.043854, 88.593086, 772.494019), 49), + new ParticleSpawn(new Vec3Comparable(452.882782, 88.589691, 772.020691), 46), + new ParticleSpawn(new Vec3Comparable(452.721710, 88.586288, 771.547302), 65), + new ParticleSpawn(new Vec3Comparable(452.560638, 88.582893, 771.073975), 43), + new ParticleSpawn(new Vec3Comparable(452.399567, 88.579498, 770.600647), 50), + new ParticleSpawn(new Vec3Comparable(452.238495, 88.576103, 770.127319), 48), + new ParticleSpawn(new Vec3Comparable(452.077423, 88.572701, 769.653992), 47), + new ParticleSpawn(new Vec3Comparable(451.916351, 88.569305, 769.180664), 60), + new ParticleSpawn(new Vec3Comparable(451.755280, 88.565910, 768.707336), 40), + new ParticleSpawn(new Vec3Comparable(451.594208, 88.562515, 768.234009), 69), + new ParticleSpawn(new Vec3Comparable(451.433136, 88.559120, 767.760681), 40), + new ParticleSpawn(new Vec3Comparable(451.272064, 88.555717, 767.287354), 42), + new ParticleSpawn(new Vec3Comparable(454.183441, 88.616600, 775.803040), 54) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse goblinHoldoutCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(439, 85, 777), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(439.068848, 86.624870, 776.043701), 136), + new ParticleSpawn(new Vec3Comparable(438.936066, 86.625786, 775.561646), 46), + new ParticleSpawn(new Vec3Comparable(438.804352, 86.626595, 775.079346), 65), + new ParticleSpawn(new Vec3Comparable(438.672699, 86.627396, 774.596985), 40), + new ParticleSpawn(new Vec3Comparable(438.541016, 86.628197, 774.114624), 51), + new ParticleSpawn(new Vec3Comparable(438.409332, 86.628998, 773.632263), 50), + new ParticleSpawn(new Vec3Comparable(438.277679, 86.629799, 773.149902), 50), + new ParticleSpawn(new Vec3Comparable(438.145996, 86.630608, 772.667603), 56), + new ParticleSpawn(new Vec3Comparable(438.014343, 86.631409, 772.185242), 40), + new ParticleSpawn(new Vec3Comparable(437.882660, 86.632210, 771.702881), 65), + new ParticleSpawn(new Vec3Comparable(437.751007, 86.633011, 771.220520), 45), + new ParticleSpawn(new Vec3Comparable(437.619324, 86.633812, 770.738159), 42), + new ParticleSpawn(new Vec3Comparable(437.487671, 86.634613, 770.255798), 60), + new ParticleSpawn(new Vec3Comparable(437.355988, 86.635414, 769.773499), 51), + new ParticleSpawn(new Vec3Comparable(437.224335, 86.636215, 769.291138), 44), + new ParticleSpawn(new Vec3Comparable(437.092651, 86.637024, 768.808777), 56), + new ParticleSpawn(new Vec3Comparable(436.960999, 86.637825, 768.326416), 56), + new ParticleSpawn(new Vec3Comparable(436.829315, 86.638626, 767.844055), 40), + new ParticleSpawn(new Vec3Comparable(436.697632, 86.639427, 767.361694), 50), + new ParticleSpawn(new Vec3Comparable(436.565979, 86.640228, 766.879395), 46), + new ParticleSpawn(new Vec3Comparable(439.108551, 86.620811, 776.031067), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i goblinHoldoutKingSolution = new Vec3i(377, 87, 550); + Vec3i goblinHoldoutQueenSolution = new Vec3i(322, 139, 769); + + private final CompassUse precursorCityCompassUse1 = new CompassUse( + 1647744920365L, + new BlockPos(570, 120, 565), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(570.428955, 121.630745, 565.674500), 192), + new ParticleSpawn(new Vec3Comparable(570.572998, 121.642563, 566.153137), 52), + new ParticleSpawn(new Vec3Comparable(570.714233, 121.654442, 566.632629), 45), + new ParticleSpawn(new Vec3Comparable(570.855286, 121.666321, 567.112183), 51), + new ParticleSpawn(new Vec3Comparable(570.996338, 121.678200, 567.591736), 0), + new ParticleSpawn(new Vec3Comparable(571.137390, 121.690079, 568.071289), 111), + new ParticleSpawn(new Vec3Comparable(571.278442, 121.701958, 568.550781), 38), + new ParticleSpawn(new Vec3Comparable(571.419495, 121.713844, 569.030334), 51), + new ParticleSpawn(new Vec3Comparable(571.560547, 121.725723, 569.509888), 49), + new ParticleSpawn(new Vec3Comparable(571.701599, 121.737602, 569.989441), 0), + new ParticleSpawn(new Vec3Comparable(571.842651, 121.749481, 570.468994), 101), + new ParticleSpawn(new Vec3Comparable(571.983704, 121.761360, 570.948547), 53), + new ParticleSpawn(new Vec3Comparable(572.124756, 121.773239, 571.428101), 47), + new ParticleSpawn(new Vec3Comparable(572.265747, 121.785118, 571.907654), 49), + new ParticleSpawn(new Vec3Comparable(572.406799, 121.796997, 572.387207), 49), + new ParticleSpawn(new Vec3Comparable(572.547852, 121.808876, 572.866699), 51), + new ParticleSpawn(new Vec3Comparable(572.688904, 121.820755, 573.346252), 57), + new ParticleSpawn(new Vec3Comparable(572.829956, 121.832634, 573.825806), 42), + new ParticleSpawn(new Vec3Comparable(572.971008, 121.844513, 574.305359), 50), + new ParticleSpawn(new Vec3Comparable(573.112061, 121.856392, 574.784912), 52), + new ParticleSpawn(new Vec3Comparable(570.372192, 121.631874, 565.694946), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse precursorCityCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(591, 136, 579), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(590.847961, 137.589584, 579.776672), 192), + new ParticleSpawn(new Vec3Comparable(590.918945, 137.528259, 580.267761), 50), + new ParticleSpawn(new Vec3Comparable(590.985229, 137.465118, 580.759338), 56), + new ParticleSpawn(new Vec3Comparable(591.051147, 137.401855, 581.250916), 47), + new ParticleSpawn(new Vec3Comparable(591.117126, 137.338593, 581.742493), 47), + new ParticleSpawn(new Vec3Comparable(591.183044, 137.275330, 582.234070), 49), + new ParticleSpawn(new Vec3Comparable(591.249023, 137.212067, 582.725647), 60), + new ParticleSpawn(new Vec3Comparable(591.314941, 137.148804, 583.217224), 55), + new ParticleSpawn(new Vec3Comparable(591.380920, 137.085541, 583.708801), 47), + new ParticleSpawn(new Vec3Comparable(591.446838, 137.022263, 584.200378), 50), + new ParticleSpawn(new Vec3Comparable(591.512817, 136.959000, 584.691956), 39), + new ParticleSpawn(new Vec3Comparable(591.578735, 136.895737, 585.183533), 53), + new ParticleSpawn(new Vec3Comparable(591.644714, 136.832474, 585.675110), 53), + new ParticleSpawn(new Vec3Comparable(591.710632, 136.769211, 586.166687), 45), + new ParticleSpawn(new Vec3Comparable(591.776611, 136.705948, 586.658264), 79), + new ParticleSpawn(new Vec3Comparable(591.842529, 136.642685, 587.149841), 20), + new ParticleSpawn(new Vec3Comparable(591.908508, 136.579407, 587.641418), 62), + new ParticleSpawn(new Vec3Comparable(591.974426, 136.516144, 588.132996), 48), + new ParticleSpawn(new Vec3Comparable(592.040344, 136.452881, 588.624573), 40), + new ParticleSpawn(new Vec3Comparable(592.106323, 136.389618, 589.116150), 51), + new ParticleSpawn(new Vec3Comparable(590.766357, 137.556885, 579.791565), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i precursorCitySolution = new Vec3i(604, 124, 681); + + private final CompassUse jungleCompassUse1 = new CompassUse( + 1647744980313L, + new BlockPos(454, 122, 459), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(453.954895, 122.958122, 458.687866), 141), + new ParticleSpawn(new Vec3Comparable(453.515991, 122.760010, 458.553314), 59), + new ParticleSpawn(new Vec3Comparable(453.078156, 122.560112, 458.417877), 41), + new ParticleSpawn(new Vec3Comparable(452.640381, 122.360123, 458.282349), 50), + new ParticleSpawn(new Vec3Comparable(452.202606, 122.160133, 458.146851), 66), + new ParticleSpawn(new Vec3Comparable(451.764832, 121.960136, 458.011353), 35), + new ParticleSpawn(new Vec3Comparable(451.327057, 121.760147, 457.875854), 49), + new ParticleSpawn(new Vec3Comparable(450.889313, 121.560150, 457.740356), 50), + new ParticleSpawn(new Vec3Comparable(450.451538, 121.360161, 457.604858), 49), + new ParticleSpawn(new Vec3Comparable(450.013763, 121.160172, 457.469330), 51), + new ParticleSpawn(new Vec3Comparable(449.575989, 120.960175, 457.333832), 59), + new ParticleSpawn(new Vec3Comparable(449.138214, 120.760185, 457.198334), 41), + new ParticleSpawn(new Vec3Comparable(448.700439, 120.560196, 457.062836), 55), + new ParticleSpawn(new Vec3Comparable(448.262695, 120.360199, 456.927338), 50), + new ParticleSpawn(new Vec3Comparable(447.824921, 120.160210, 456.791840), 49), + new ParticleSpawn(new Vec3Comparable(447.387146, 119.960213, 456.656311), 53), + new ParticleSpawn(new Vec3Comparable(446.949371, 119.760223, 456.520813), 43), + new ParticleSpawn(new Vec3Comparable(446.511597, 119.560234, 456.385315), 51), + new ParticleSpawn(new Vec3Comparable(446.073853, 119.360237, 456.249817), 49), + new ParticleSpawn(new Vec3Comparable(445.636078, 119.160248, 456.114319), 56), + new ParticleSpawn(new Vec3Comparable(453.975647, 122.920158, 458.668488), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse jungleCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(438, 126, 468), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(437.701721, 127.395279, 467.455048), 139), + new ParticleSpawn(new Vec3Comparable(437.297852, 127.161415, 467.275604), 35), + new ParticleSpawn(new Vec3Comparable(436.895813, 126.927208, 467.092529), 68), + new ParticleSpawn(new Vec3Comparable(436.493896, 126.692986, 466.909241), 41), + new ParticleSpawn(new Vec3Comparable(436.091980, 126.458763, 466.725952), 54), + new ParticleSpawn(new Vec3Comparable(435.690033, 126.224533, 466.542664), 39), + new ParticleSpawn(new Vec3Comparable(435.288116, 125.990311, 466.359375), 52), + new ParticleSpawn(new Vec3Comparable(434.886200, 125.756088, 466.176086), 66), + new ParticleSpawn(new Vec3Comparable(434.484283, 125.521866, 465.992767), 40), + new ParticleSpawn(new Vec3Comparable(434.082367, 125.287636, 465.809479), 41), + new ParticleSpawn(new Vec3Comparable(433.680420, 125.053413, 465.626190), 50), + new ParticleSpawn(new Vec3Comparable(433.278503, 124.819191, 465.442902), 59), + new ParticleSpawn(new Vec3Comparable(432.876587, 124.584969, 465.259613), 54), + new ParticleSpawn(new Vec3Comparable(432.474670, 124.350746, 465.076294), 38), + new ParticleSpawn(new Vec3Comparable(432.072723, 124.116516, 464.893005), 63), + new ParticleSpawn(new Vec3Comparable(431.670807, 123.882294, 464.709717), 36), + new ParticleSpawn(new Vec3Comparable(431.268890, 123.648071, 464.526428), 64), + new ParticleSpawn(new Vec3Comparable(430.866974, 123.413849, 464.343140), 48), + new ParticleSpawn(new Vec3Comparable(430.465057, 123.179619, 464.159821), 53), + new ParticleSpawn(new Vec3Comparable(430.063110, 122.945396, 463.976532), 46), + new ParticleSpawn(new Vec3Comparable(437.732666, 127.385803, 467.381592), 1) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i jungleSolution = new Vec3i(343, 72, 424); + Vec3i jungleSolutionTempleDoor = new Vec3i( + jungleSolution.getX() - 57, + jungleSolution.getY() + 36, + jungleSolution.getZ() -21); + + private final CompassUse magmaCompassUse1 = new CompassUse( + 1647745029814L, + new BlockPos(462, 58, 550), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(462.226898, 59.614380, 550.032654), 160), + new ParticleSpawn(new Vec3Comparable(462.693848, 59.609089, 549.853943), 47), + new ParticleSpawn(new Vec3Comparable(463.160706, 59.603809, 549.674988), 48), + new ParticleSpawn(new Vec3Comparable(463.627533, 59.598526, 549.496033), 136), + new ParticleSpawn(new Vec3Comparable(464.094391, 59.593246, 549.317017), 0), + new ParticleSpawn(new Vec3Comparable(464.561218, 59.587963, 549.138062), 0), + new ParticleSpawn(new Vec3Comparable(465.028076, 59.582684, 548.959106), 53), + new ParticleSpawn(new Vec3Comparable(465.494904, 59.577400, 548.780090), 48), + new ParticleSpawn(new Vec3Comparable(465.961761, 59.572117, 548.601135), 55), + new ParticleSpawn(new Vec3Comparable(466.428589, 59.566837, 548.422180), 47), + new ParticleSpawn(new Vec3Comparable(466.895416, 59.561554, 548.243164), 46), + new ParticleSpawn(new Vec3Comparable(467.362274, 59.556274, 548.064209), 53), + new ParticleSpawn(new Vec3Comparable(467.829102, 59.550991, 547.885254), 50), + new ParticleSpawn(new Vec3Comparable(468.295959, 59.545712, 547.706238), 54), + new ParticleSpawn(new Vec3Comparable(468.762787, 59.540428, 547.527283), 52), + new ParticleSpawn(new Vec3Comparable(469.229645, 59.535145, 547.348328), 105), + new ParticleSpawn(new Vec3Comparable(469.696472, 59.529865, 547.169312), 1), + new ParticleSpawn(new Vec3Comparable(470.163300, 59.524582, 546.990356), 51), + new ParticleSpawn(new Vec3Comparable(470.630157, 59.519302, 546.811401), 40), + new ParticleSpawn(new Vec3Comparable(471.096985, 59.514019, 546.632385), 49), + new ParticleSpawn(new Vec3Comparable(462.221954, 59.614719, 550.019165), 0) + )), + HandleCompassResult.SUCCESS, + SolverState.NEED_SECOND_COMPASS); + + private final CompassUse magmaCompassUse2 = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + new BlockPos(449, 53, 556), + new ArrayList<>(Arrays.asList( + new ParticleSpawn(new Vec3Comparable(449.120911, 54.624340, 556.108948), 204), + new ParticleSpawn(new Vec3Comparable(449.587433, 54.627399, 555.929138), 102), + new ParticleSpawn(new Vec3Comparable(450.053741, 54.630432, 555.748657), 0), + new ParticleSpawn(new Vec3Comparable(450.520020, 54.633465, 555.568237), 62), + new ParticleSpawn(new Vec3Comparable(450.986298, 54.636497, 555.387756), 38), + new ParticleSpawn(new Vec3Comparable(451.452606, 54.639530, 555.207275), 48), + new ParticleSpawn(new Vec3Comparable(451.918884, 54.642563, 555.026794), 63), + new ParticleSpawn(new Vec3Comparable(452.385162, 54.645596, 554.846375), 52), + new ParticleSpawn(new Vec3Comparable(452.851471, 54.648628, 554.665894), 35), + new ParticleSpawn(new Vec3Comparable(453.317749, 54.651661, 554.485413), 53), + new ParticleSpawn(new Vec3Comparable(453.784027, 54.654694, 554.304993), 54), + new ParticleSpawn(new Vec3Comparable(454.250305, 54.657726, 554.124512), 50), + new ParticleSpawn(new Vec3Comparable(454.716614, 54.660759, 553.944031), 55), + new ParticleSpawn(new Vec3Comparable(455.182892, 54.663792, 553.763550), 49), + new ParticleSpawn(new Vec3Comparable(455.649170, 54.666824, 553.583130), 41), + new ParticleSpawn(new Vec3Comparable(456.115479, 54.669857, 553.402649), 48), + new ParticleSpawn(new Vec3Comparable(456.581757, 54.672890, 553.222168), 54), + new ParticleSpawn(new Vec3Comparable(457.048035, 54.675922, 553.041687), 45), + new ParticleSpawn(new Vec3Comparable(457.514313, 54.678959, 552.861267), 55), + new ParticleSpawn(new Vec3Comparable(449.110443, 54.623035, 556.079163), 49) + )), + HandleCompassResult.SUCCESS, + SolverState.SOLVED); + + Vec3i magmaSolution = new Vec3i(737, 56, 444); + + Vec3Comparable kingMinesOrNucleusCoordsInRemnants = new Vec3Comparable(604, 100, 681); + Vec3Comparable odawaSolution = new Vec3Comparable(349, 110, 390); + + private final CompassUse nucleusCompass = new CompassUse( + 1647745029814L, + new BlockPos(512, 106, 512), + null, + HandleCompassResult.PLAYER_IN_NUCLEUS, + SolverState.NOT_STARTED); + + private void resetSolverState() { + solver.initWorld(); + systemTimeMillis = 0; + solver.currentTimeMillis = () -> (systemTimeMillis); + // These must be overridden for all test cases or an exception will be thrown when + // data that is only present when running in the context of Minecraft is accessed. + solver.keyInInventory = () -> false; + solver.kingsScentPresent = () -> false; + solver.foundCrystals = () -> EnumSet.noneOf(Crystal.class); + } + + @BeforeEach + void setUp() { + NEUDebugLogger.logMethod = CrystalWishingCompassSolverTest::neuDebugLog; + NEUDebugLogger.allFlagsEnabled = true; + resetSolverState(); + } + + private void checkSolution(Solution solution) { + int index = 0; + for (CompassUse compassUse : solution.compassUses) { + systemTimeMillis += compassUse.timeIncrementMillis; + HandleCompassResult handleCompassResult = solver.handleCompassUse(compassUse.playerPos); + Assertions.assertEquals(compassUse.expectedHandleCompassUseResult, + handleCompassResult, + "CompassUse index " + index); + + for (ParticleSpawn particle : compassUse.particles) { + systemTimeMillis += particle.timeIncrementMillis; + solver.solveUsingParticle( + particle.spawnLocation.xCoord, + particle.spawnLocation.yCoord, + particle.spawnLocation.zCoord, + systemTimeMillis); + } + + Assertions.assertEquals(compassUse.expectedSolverState, + solver.getSolverState(), + "CompassUse index " + index); + if (compassUse.expectedSolverState == SolverState.SOLVED) { + Assertions.assertEquals(solution.expectedSolutionCoords, + solver.getSolutionCoords()); + } + + index++; + } + } + + @Test + void first_compass_without_particles_sets_solver_state_to_processing_first_use() { + // Arrange + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.clear(); + compassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; + + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void new_compass_resets_processing_first_use_state_after_timeout() { + // Arrange + CompassUse processingFirstUseCompassUse = new CompassUse(minesOfDivanCompassUse1); + processingFirstUseCompassUse.particles.clear(); + processingFirstUseCompassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; + Solution processingFirstUseSolution = new Solution( + new ArrayList<>(Collections.singletonList(processingFirstUseCompassUse)), + Vec3i.NULL_VECTOR); + checkSolution(processingFirstUseSolution); + Assertions.assertEquals(SolverState.PROCESSING_FIRST_USE, solver.getSolverState()); + + CompassUse resetStateCompassUse = new CompassUse(jungleCompassUse1); + resetStateCompassUse.timeIncrementMillis = ALL_PARTICLES_MAX_MILLIS + 1; + resetStateCompassUse.expectedHandleCompassUseResult = HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; + resetStateCompassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; + Solution goodSolution = new Solution( + new ArrayList<>(Collections.singletonList(resetStateCompassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(goodSolution); + } + + @Test + void first_compass_with_repeating_particles_sets_state_to_need_second_compass() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void first_compass_in_nucleus_sets_state_to_player_in_nucleus() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(nucleusCompass)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void use_while_handling_previous_returns_still_processing_first_use() { + // Arrange + CompassUse compassUse1 = new CompassUse( + 1647528732979L, + new BlockPos(754, 137, 239), + new ArrayList<>(Collections.singletonList( + new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137) + )), + HandleCompassResult.SUCCESS, + SolverState.PROCESSING_FIRST_USE); + + // STILL_PROCESSING_FIRST_USE is expected instead of LOCATION_TOO_CLOSE since the solver + // isn't ready for the second compass use, which includes the location check + CompassUse compassUse2 = new CompassUse(compassUse1); + compassUse2.expectedHandleCompassUseResult = HandleCompassResult.STILL_PROCESSING_PRIOR_USE; + compassUse2.timeIncrementMillis = 500; + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void missing_repeating_particles_sets_state_to_failed_timeout_no_repeating() { + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.remove(compassUse.particles.size()-1); + compassUse.particles.get(compassUse.particles.size()-1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; + compassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; + + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void compasses_too_close_returns_location_too_close_and_solver_state_is_still_need_second_compass() { + // Arrange + CompassUse secondCompassUse = new CompassUse( + DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, + minesOfDivanCompassUse1.playerPos.add(2, 2, 2), + null, + HandleCompassResult.LOCATION_TOO_CLOSE, + SolverState.NEED_SECOND_COMPASS + ); + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, secondCompassUse)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_sets_solver_state_to_processing_second_use() { + // Arrange + CompassUse secondCompassUse = new CompassUse(minesOfDivanCompassUse2); + secondCompassUse.expectedSolverState = SolverState.PROCESSING_SECOND_USE; + secondCompassUse.particles.clear(); + + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_with_repeating_particles_sets_state_to_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void particles_from_first_compass_are_ignored_by_second_compass() { + // Arrange + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + compassUse2.particles.add(0, minesOfDivanCompassUse1.particles.get(0)); + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + private void execInvalidParticlesInvalidSolution() { + // Arrange + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + + // reverse the direction of the particles, moving the repeat particle + // to "new" end + compassUse2.particles.remove(compassUse2.particles.size()-1); + Collections.reverse(compassUse2.particles); + // add a new repeat particle + compassUse2.particles.add(new ParticleSpawn(compassUse2.particles.get(0))); + + // Adjust the player position + compassUse2.playerPos = new BlockPos(compassUse2.particles.get(0).spawnLocation); + compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_compass_with_inverted_particles_sets_state_to_invalid_solution() { + // Arrange, Act, and Assert + execInvalidParticlesInvalidSolution(); + } + + @Test + void solution_outside_hollows_sets_state_to_invalid_solution() { + // Arrange + CompassUse compassUse1 = new CompassUse(minesOfDivanCompassUse1); + CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); + Vec3 offset = new Vec3(0.0, 200.0, 0.0); + + compassUse1.playerPos = compassUse1.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); + for (ParticleSpawn particle : compassUse1.particles) { + particle.spawnLocation = particle.spawnLocation.add(offset); + } + + compassUse2.playerPos = compassUse2.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); + for (ParticleSpawn particle : compassUse2.particles) { + particle.spawnLocation = particle.spawnLocation.add(offset); + } + compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; + + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void second_solution_can_be_solved_after_state_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + checkSolution(solution); + + Solution solution2 = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution2); + } + + @Test + void second_solution_can_be_solved_after_state_is_failed() { + // Arrange + execInvalidParticlesInvalidSolution(); + Assertions.assertEquals(solver.getSolverState(), SolverState.FAILED_INVALID_SOLUTION); + + Solution solution2 = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution2); + } + + @Test + void distant_particles_are_ignored() { + // Arrange + CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); + compassUse.particles.get(2).spawnLocation.addVector(100.0, 100.0, 100.0); + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act & Assert + checkSolution(solution); + } + + @Test + void possible_targets_includes_queen_and_excludes_king_when_kings_scent_is_present() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + solver.kingsScentPresent = () -> true; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void possible_targets_excludes_king_and_includes_queen_when_kings_scent_is_not_present() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + solver.kingsScentPresent = () -> false; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void possible_targets_excludes_odawa_and_includes_temple_when_key_in_inventory() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + solver.keyInInventory = () -> true; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertFalse(targets.contains(CompassTarget.ODAWA)); + Assertions.assertTrue(targets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void possible_targets_includes_odawa_and_excludes_temple_when_key_not_in_inventory() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + solver.keyInInventory = () -> false; + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); + Assertions.assertFalse(targets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void possible_targets_only_contains_city_and_nucleus_when_in_remnants_without_sapphire_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(precursorCityCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.PRECURSOR_CITY)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_mines_and_nucleus_when_in_deposits_without_jade_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.MINES_OF_DIVAN)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_king_or_queen_and_nucleus_when_in_holdout_without_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING) || + targets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + @Test + void possible_targets_only_contains_king_and_odawa_and_nucleus_when_in_jungle_without_crystal_or_key() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); + Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(3, targets.size()); + } + + @Test + void possible_targets_only_contains_bal_and_nucleus_when_in_magma_fields_without_crystal() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(magmaCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + EnumSet targets = solver.getPossibleTargets(); + + // Assert + Assertions.assertTrue(targets.contains(CompassTarget.BAL)); + Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + Assertions.assertEquals(2, targets.size()); + } + + private void CheckExcludedTargetsForCrystals( + CompassUse compassUseToExecute, + ArrayList excludedTargets, + EnumSet foundCrystals) { + // Arrange + EnumSet targets; + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(compassUseToExecute)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + targets = solver.getPossibleTargets(); + boolean targetFound = false; + for (CompassTarget target : excludedTargets) { + if (targets.contains(target)) { + targetFound = true; + break; + } + } + Assertions.assertTrue(targetFound); + + resetSolverState(); + solver.foundCrystals = () -> foundCrystals; + checkSolution(solution); + targets = solver.getPossibleTargets(); + + // Assert + for (CompassTarget target : excludedTargets) { + Assertions.assertFalse(targets.contains(target)); + } + } + + @Test + void possible_targets_excludes_king_and_queen_when_amber_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Arrays.asList( + CompassTarget.GOBLIN_KING, + CompassTarget.GOBLIN_QUEEN + )); + CheckExcludedTargetsForCrystals(goblinHoldoutCompassUse1, excludedTargets, EnumSet.of(Crystal.AMBER)); + } + + @Test + void possible_targets_excludes_odawa_and_temple_when_amethyst_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Arrays.asList( + CompassTarget.ODAWA, + CompassTarget.JUNGLE_TEMPLE)); + CheckExcludedTargetsForCrystals(jungleCompassUse1, excludedTargets, EnumSet.of(Crystal.AMETHYST)); + } + + @Test + void possible_targets_excludes_mines_when_jade_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.MINES_OF_DIVAN)); + CheckExcludedTargetsForCrystals(minesOfDivanCompassUse1, excludedTargets, EnumSet.of(Crystal.JADE)); + } + + @Test + void possible_targets_excludes_city_when_sapphire_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.PRECURSOR_CITY)); + CheckExcludedTargetsForCrystals(precursorCityCompassUse1, excludedTargets, EnumSet.of(Crystal.SAPPHIRE)); + } + + @Test + void possible_targets_excludes_bal_when_topaz_crystal_found() { + ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( + CompassTarget.BAL)); + CheckExcludedTargetsForCrystals(magmaCompassUse1, excludedTargets, EnumSet.of(Crystal.TOPAZ)); + } + + @Test + void solver_resets_when_possible_targets_change_based_on_found_crystals() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; + solver.foundCrystals = () -> EnumSet.of(Crystal.JADE); + HandleCompassResult handleCompassResult = solver.handleCompassUse(minesOfDivanCompassUse2.playerPos); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + + @Test + void solver_resets_when_possible_targets_change_based_on_location() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + checkSolution(solution); + systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; + BlockPos newLocation = minesOfDivanCompassUse2.playerPos.add(-400, 0 ,0); + HandleCompassResult handleCompassResult = solver.handleCompassUse(newLocation); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + + @Test + void mines_of_divan_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, minesOfDivanCompassUse2)), + minesOfDivanSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void jungle_temple_solution_with_key_in_inventory_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), + jungleSolutionTempleDoor + ); + solver.keyInInventory = () -> true; + + // Act & Assert + checkSolution(solution); + } + + @Test + void jungle_temple_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), + jungleSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void precursor_city_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(precursorCityCompassUse1, precursorCityCompassUse2)), + precursorCitySolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void goblin_king_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(goblinHoldoutCompassUse1, goblinHoldoutCompassUse2)), + goblinHoldoutKingSolution + ); + + // Act & Assert + checkSolution(solution); + } + + @Test + void bal_solution_is_solved() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Arrays.asList(magmaCompassUse1, magmaCompassUse2)), + magmaSolution + ); + + // Act & Assert + checkSolution(solution); + } + + EnumSet GetSolutionTargetsHelper( + EnumSet possibleTargets, + Vec3Comparable solutionCoords, + int expectedSolutionCount) { + EnumSet solutionTargets = + CrystalWishingCompassSolver.getSolutionTargets(possibleTargets, solutionCoords); + Assertions.assertEquals(expectedSolutionCount, solutionTargets.size()); + return solutionTargets; + } + + @Test + void solutionPossibleTargets_removes_nucleus_when_coords_not_in_nucleus() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + new Vec3Comparable(minesOfDivanSolution), + 2); + + //Assert + Assertions.assertFalse(solutionTargets.contains(CompassTarget.CRYSTAL_NUCLEUS)); + } + + @Test + void solutionPossibleTargets_includes_adjacent_zones() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + kingMinesOrNucleusCoordsInRemnants, + 2); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); + Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); + } + + @Test + void solutionPossibleTargets_skips_y_filtering_when_single_possible_target() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.of(CompassTarget.GOBLIN_QUEEN), + new Vec3Comparable(goblinHoldoutKingSolution), // Coords not valid for queen + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); + } + + @Test + void solutionPossibleTargets_still_filters_non_adjacent_when_single_possible_target() { + // Arrange, Act and Assert + GetSolutionTargetsHelper( + EnumSet.of(CompassTarget.ODAWA), + kingMinesOrNucleusCoordsInRemnants, + 0); + } + + @Test + void solutionPossibleTargets_includes_king_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(goblinHoldoutKingSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); + } + + @Test + void solutionPossibleTargets_includes_odawa_based_on_y_coordinate() { + // Arrange & Act + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(odawaSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); + } + + @Test + void solutionPossibleTargets_includes_mines_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(minesOfDivanSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); + } + + @Test + void solutionPossibleTargets_includes_temple_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.BAL); + possibleTargets.remove(CompassTarget.ODAWA); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(jungleSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); + } + + @Test + void solutionPossibleTargets_includes_queen_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + possibleTargets.remove(CompassTarget.ODAWA); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(goblinHoldoutQueenSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); + } + + @Test + void solutionPossibleTargets_includes_city_based_on_y_coordinate() { + // Arrange & Act + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + EnumSet solutionTargets = GetSolutionTargetsHelper( + possibleTargets, + new Vec3Comparable(precursorCitySolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); + } + + @Test + void solutionPossibleTargets_includes_bal_based_on_y_coordinate() { + // Arrange & Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + EnumSet.allOf(CompassTarget.class), + new Vec3Comparable(magmaSolution), + 1); + + //Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); + } + + // Represents a particle spawn, including: + // - Milliseconds to increment the "system time" prior to spawn. + // - The particle spawn location. + static class ParticleSpawn { + long timeIncrementMillis; + Vec3Comparable spawnLocation; + + ParticleSpawn(Vec3Comparable spawnLocation, long timeIncrementMillis) { + this.timeIncrementMillis = timeIncrementMillis; + this.spawnLocation = spawnLocation; + } + + ParticleSpawn(ParticleSpawn source) { + timeIncrementMillis = source.timeIncrementMillis; + spawnLocation = new Vec3Comparable(source.spawnLocation); + } + } + + // Represents a use of the wishing compass, including: + // - Milliseconds to increment the "system time" prior to use. + // - The player's position when the compass is used. + // - The resulting set of particles + // - The expected state of the wishing compass solver after this compass is used + static class CompassUse { + long timeIncrementMillis; + BlockPos playerPos; + ArrayList particles; + HandleCompassResult expectedHandleCompassUseResult; + SolverState expectedSolverState; + + CompassUse(long timeIncrementMillis, + BlockPos playerPos, + ArrayList particles, + HandleCompassResult expectedHandleCompassUseResult, + SolverState expectedState) { + this.timeIncrementMillis = timeIncrementMillis; + this.playerPos = playerPos; + this.particles = particles != null ? particles : new ArrayList<>(); + this.expectedHandleCompassUseResult = expectedHandleCompassUseResult; + this.expectedSolverState = expectedState; + } + + CompassUse(CompassUse source) { + this.timeIncrementMillis = source.timeIncrementMillis; + this.playerPos = new BlockPos(source.playerPos); + this.particles = new ArrayList<>(source.particles); + this.expectedHandleCompassUseResult = source.expectedHandleCompassUseResult; + this.expectedSolverState = source.expectedSolverState; + } + } + + static class Solution { + ArrayList compassUses; + Vec3i expectedSolutionCoords; + + Solution(ArrayList compassUses, Vec3i expectedSolutionCoords) { + this.compassUses = compassUses; + this.expectedSolutionCoords = new Vec3i(expectedSolutionCoords.getX(), expectedSolutionCoords.getY(), expectedSolutionCoords.getZ()); + } + } + + private static void neuDebugLog(String message) { + System.out.println(message); + } +} diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml new file mode 100644 index 00000000..25209eae --- /dev/null +++ b/src/test/resources/log4j2-test.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + -- cgit From aa3357d71f7a80d3e1463df273915460ff343823 Mon Sep 17 00:00:00 2001 From: CraftyOldMiner <85420839+CraftyOldMiner@users.noreply.github.com> Date: Thu, 7 Apr 2022 05:17:47 -0500 Subject: Wishing compass improved target identification, bug fixes (#108) * Wishing compass improved target identification, bug fixes - Use structure sizes to determine targets instead of adjacent zones. This should fix sporadic incorrect targets. - Fix compass not working when used on the edge of a zone due to bounding box coordinates being off by one. - Record all seen particles during compass use for troubleshooting intermittent failures. * Fix description for waypoint names * Fix typo --- .../miscfeatures/CrystalWishingCompassSolver.java | 352 +++++++++++++-------- .../options/seperateSections/Mining.java | 6 +- .../CrystalWishingCompassSolverTest.java | 318 ++++++++++++------- 3 files changed, 429 insertions(+), 247 deletions(-) (limited to 'src/test/java') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java index 9a950e7f..977ef818 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java @@ -24,6 +24,7 @@ import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.EnumSet; import java.util.HashMap; @@ -63,6 +64,15 @@ public class CrystalWishingCompassSolver { TOPAZ, } + enum HollowsZone { + CRYSTAL_NUCLEUS, + JUNGLE, + MITHRIL_DEPOSITS, + GOBLIN_HOLDOUT, + PRECURSOR_REMNANTS, + MAGMA_FIELDS, + } + private static final CrystalWishingCompassSolver INSTANCE = new CrystalWishingCompassSolver(); public static CrystalWishingCompassSolver getInstance() { return INSTANCE; @@ -70,16 +80,32 @@ public class CrystalWishingCompassSolver { private static final Minecraft mc = Minecraft.getMinecraft(); private static boolean isSkytilsPresent = false; + private static final ArrayDeque seenParticles = new ArrayDeque<>(); - // NOTE: There is a small set of breakable blocks above the nucleus at Y > 181. While this zone is reported - // as the Crystal Nucleus by Hypixel, for wishing compass purposes it is in the appropriate quadrant. + // There is a small set of breakable blocks above the nucleus at Y > 181. While this zone is reported + // as the Crystal Nucleus by Hypixel, for wishing compass purposes it is in the appropriate quadrant. private static final AxisAlignedBB NUCLEUS_BB = new AxisAlignedBB(462, 63, 461, 564, 181, 565); + // Bounding box around all breakable blocks in the crystal hollows, appears as bedrock in-game private static final AxisAlignedBB HOLLOWS_BB = new AxisAlignedBB(201, 30, 201, 824, 189, 824); - private static final AxisAlignedBB PRECURSOR_REMNANTS_BB = new AxisAlignedBB(513, 64, 513, 824, 189, 824); - private static final AxisAlignedBB MITHRIL_DEPOSITS_BB = new AxisAlignedBB(513, 64, 201, 824, 189, 512); - private static final AxisAlignedBB GOBLIN_HOLDOUT_BB = new AxisAlignedBB(201, 64, 513, 512, 189, 824); - private static final AxisAlignedBB JUNGLE_BB = new AxisAlignedBB(201, 64, 201, 512, 189, 512); - private static final AxisAlignedBB MAGMA_FIELDS_BB = new AxisAlignedBB(201, 30, 201, 824, 63, 824); + + // Zone bounding boxes + private static final AxisAlignedBB PRECURSOR_REMNANTS_BB = new AxisAlignedBB(512, 63, 512, 824, 189, 824); + private static final AxisAlignedBB MITHRIL_DEPOSITS_BB = new AxisAlignedBB(512, 63, 201, 824, 189, 513); + private static final AxisAlignedBB GOBLIN_HOLDOUT_BB = new AxisAlignedBB(201, 63, 512, 513, 189, 824); + private static final AxisAlignedBB JUNGLE_BB = new AxisAlignedBB(201, 63, 201, 513, 189, 513); + private static final AxisAlignedBB MAGMA_FIELDS_BB = new AxisAlignedBB(201, 30, 201, 824, 64, 824); + + // Structure bounding boxes (size + 2 in each dimension to make it an actual bounding box) + private static final AxisAlignedBB PRECURSOR_CITY_BB = new AxisAlignedBB(0, 0, 0, 107, 122, 107); + private static final AxisAlignedBB GOBLIN_KING_BB = new AxisAlignedBB(0, 0, 0, 59, 53, 56); + private static final AxisAlignedBB GOBLIN_QUEEN_BB = new AxisAlignedBB(0, 0, 0, 108, 114, 108); + private static final AxisAlignedBB JUNGLE_TEMPLE_BB = new AxisAlignedBB(0, 0, 0, 108, 120, 108); + private static final AxisAlignedBB ODAWA_BB = new AxisAlignedBB(0, 0, 0, 53, 46, 54); + private static final AxisAlignedBB MINES_OF_DIVAN_BB = new AxisAlignedBB(0, 0, 0, 108, 125, 108); + private static final AxisAlignedBB KHAZAD_DUM_BB = new AxisAlignedBB(0, 0, 0, 110, 46, 108); + + private static final Vec3Comparable JUNGLE_DOOR_OFFSET_FROM_CRYSTAL = new Vec3Comparable(-57, 36, -21); + private static final double MAX_DISTANCE_BETWEEN_PARTICLES = 0.6; private static final double MAX_DISTANCE_FROM_USE_TO_FIRST_PARTICLE = 9.0; @@ -118,6 +144,20 @@ public class CrystalWishingCompassSolver { return possibleTargets; } + public static HollowsZone getZoneForCoords(BlockPos blockPos) { + return getZoneForCoords(new Vec3Comparable(blockPos)); + } + + public static HollowsZone getZoneForCoords(Vec3Comparable coords) { + if (NUCLEUS_BB.isVecInside(coords)) return HollowsZone.CRYSTAL_NUCLEUS; + if (JUNGLE_BB.isVecInside(coords)) return HollowsZone.JUNGLE; + if (MITHRIL_DEPOSITS_BB.isVecInside(coords)) return HollowsZone.MITHRIL_DEPOSITS; + if (GOBLIN_HOLDOUT_BB.isVecInside(coords)) return HollowsZone.GOBLIN_HOLDOUT; + if (PRECURSOR_REMNANTS_BB.isVecInside(coords)) return HollowsZone.PRECURSOR_REMNANTS; + if (MAGMA_FIELDS_BB.isVecInside(coords)) return HollowsZone.MAGMA_FIELDS; + throw new IllegalArgumentException("Coordinates do not fall in known zone: " + coords.toString()); + } + private void resetForNewTarget() { NEUDebugLogger.log(NEUDebugFlag.WISHING,"Resetting for new target"); solverState = SolverState.NOT_STARTED; @@ -236,6 +276,7 @@ public class CrystalWishingCompassSolver { } firstCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); + seenParticles.clear(); solverState = SolverState.PROCESSING_FIRST_USE; possibleTargets = calculatePossibleTargets(playerPos); return HandleCompassResult.SUCCESS; @@ -244,7 +285,10 @@ public class CrystalWishingCompassSolver { return HandleCompassResult.LOCATION_TOO_CLOSE; } - if (!possibleTargets.equals(calculatePossibleTargets(playerPos))) { + HollowsZone firstCompassZone = getZoneForCoords(firstCompass.whereUsed); + HollowsZone playerZone = getZoneForCoords(playerPos); + if (!possibleTargets.equals(calculatePossibleTargets(playerPos)) || + firstCompassZone != playerZone) { resetForNewTarget(); return HandleCompassResult.POSSIBLE_TARGETS_CHANGED; } @@ -291,6 +335,13 @@ public class CrystalWishingCompassSolver { return; } + // Capture particle troubleshooting info for two minutes starting when the first compass is used. + // This list is reset each time the first compass is used from a NOT_STARTED state. + if (firstCompass != null && !solverState.equals(SolverState.SOLVED) && + System.currentTimeMillis() < firstCompass.whenUsedMillis + 2*60*1000) { + seenParticles.add(new ParticleData(new Vec3Comparable(x, y, z), System.currentTimeMillis())); + } + try { SolverState originalSolverState = solverState; solveUsingParticle(x, y, z, currentTimeMillis.getAsLong()); @@ -399,13 +450,17 @@ public class CrystalWishingCompassSolver { return; } - solutionPossibleTargets = getSolutionTargets(possibleTargets, solution); + solutionPossibleTargets = getSolutionTargets( + getZoneForCoords(firstCompass.whereUsed), + foundCrystals.getAsCrystalEnumSet(), + possibleTargets, + solution); // Adjust the Jungle Temple solution coordinates if (solutionPossibleTargets.size() == 1 && solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE)) { originalSolution = solution; - solution = solution.addVector(-57, 36, -21); + solution = solution.add(JUNGLE_DOOR_OFFSET_FROM_CRYSTAL); } solverState = SolverState.SOLVED; @@ -441,14 +496,24 @@ public class CrystalWishingCompassSolver { return foundCrystals; } - // Returns candidates based on seen Y coordinates and quadrants that - // are not adjacent to the solution's quadrant. If the solution is - // the nucleus then a copy of the original possible targets is - // returned. + // Returns candidates based on: + // - Structure Y levels observed in various lobbies. It is assumed + // that structures other than Khazad Dum cannot have any portion + // in the Magma Fields. + // + // - Structure sizes & offsets into other zones that assume at least + // one block must be in the correct zone. + // + // - An assumption that any structure could be missing with a + // special exception for the Jungle Temple since it often conflicts + // with Bal and a lobby with a missing Jungle Temple has not been + // observed. This exception will remove Bal as a target if: + // - Target candidates include both Bal & the Jungle Temple. + // - The Amethyst crystal has not been acquired. + // - The zone that the compass was used in is the Jungle. // - // NOTE: Adjacent quadrant filtering could be improved based on - // structure sizes in the future to only allow a certain - // distance into the adjacent quadrant. + // - If the solution is the Crystal Nucleus then a copy of the + // passed in possible targets is returned. // // |----------|------------| // | Jungle | Mithril | @@ -458,160 +523,155 @@ public class CrystalWishingCompassSolver { // | Holdout | Deposits | // |----------|------------| static public EnumSet getSolutionTargets( + HollowsZone compassUsedZone, + EnumSet foundCrystals, EnumSet possibleTargets, Vec3Comparable solution) { EnumSet solutionPossibleTargets; solutionPossibleTargets = possibleTargets.clone(); - if (NUCLEUS_BB.isVecInside(solution)) { + HollowsZone solutionZone = getZoneForCoords(solution); + if (solutionZone == HollowsZone.CRYSTAL_NUCLEUS) { return solutionPossibleTargets; } solutionPossibleTargets.remove(CompassTarget.CRYSTAL_NUCLEUS); - // Eliminate non-adjacent zones first - if (MITHRIL_DEPOSITS_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); - solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); - } else if (PRECURSOR_REMNANTS_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.ODAWA); - solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); - } else if (GOBLIN_HOLDOUT_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); - } else if (JUNGLE_BB.isVecInside(solution)) { - solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); + // Y coordinates are 43-71 from 13 samples + // Y=41/74 is the absolute min/max based on structure size if + // the center of the topaz crystal has to be in magma fields. + if (solutionPossibleTargets.contains(CompassTarget.BAL) && + solution.yCoord > 75) { + solutionPossibleTargets.remove(CompassTarget.BAL); } - // If there's only 1 possible target then don't remove based - // on Y coordinates since assumptions about Y coordinates could - // be wrong. - if (solutionPossibleTargets.size() > 1) { - // Y coordinates are 43-70 from 11 samples - if (solutionPossibleTargets.contains(CompassTarget.BAL) && - solution.yCoord > 72) { - solutionPossibleTargets.remove(CompassTarget.BAL); - } + // Y coordinates are 93-157 from 15 samples. + // Y=83/167 is the absolute min/max based on structure size + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && + solution.yCoord < 82 || solution.yCoord > 168) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); + } - // Y coordinates are 93-157 from 10 samples, may be able to filter - // more based on the offset of the King within the structure - if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && - solution.yCoord < 64) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); - } + // Y coordinates are 129-139 from 10 samples + // Y=126/139 is the absolute min/max based on structure size + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && + (solution.yCoord < 125 || solution.yCoord > 140)) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); + } - // Y coordinates are 129-139 from 10 samples - if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && - (solution.yCoord < 127 || solution.yCoord > 141)) { - solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); - } + // Y coordinates are 72-80 from 10 samples + // Y=73/80 is the absolute min/max based on structure size + if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && + (solution.yCoord < 72 || solution.yCoord > 81)) { + solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); + } - // Y coordinates are 72-80 from 10 samples - if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && - (solution.yCoord < 70 || solution.yCoord > 82)) { - solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); - } + // Y coordinates are 87-155 from 7 samples + // Y=74/155 is the absolute min/max solution based on structure size + if (solutionPossibleTargets.contains(CompassTarget.ODAWA) && + (solution.yCoord < 73 || solution.yCoord > 155)) { + solutionPossibleTargets.remove(CompassTarget.ODAWA); + } - // Y coordinates are 110-128 from 3 samples, not enough data to use - if (solutionPossibleTargets.contains(CompassTarget.ODAWA) && - solution.yCoord < 64) { - solutionPossibleTargets.remove(CompassTarget.ODAWA); - } + // Y coordinates are 122-129 from 8 samples + // Y=122/129 is the absolute min/max based on structure size + if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && + (solution.yCoord < 121 || solution.yCoord > 130)) { + solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); + } - // Y coordinates are 122-129 from 8 samples - if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && - (solution.yCoord < 119 || solution.yCoord > 132)) { - solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); - } + // Y coordinates are 98-102 from 15 samples + // Y=98/100 is the absolute min/max based on structure size, + // but 102 has been seen - possibly with earlier code that rounded up + if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && + (solution.yCoord < 97 || solution.yCoord > 102)) { + solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); + } - // Y coordinates are 98-102 from 15 samples - if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && - (solution.yCoord < 96 || solution.yCoord > 104)) { - solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); - } + // Now filter by structure offset + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && + (solution.xCoord > GOBLIN_HOLDOUT_BB.maxX + GOBLIN_KING_BB.maxX || + solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_KING_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); } - return solutionPossibleTargets; - } + if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && + (solution.xCoord > GOBLIN_HOLDOUT_BB.maxX + GOBLIN_QUEEN_BB.maxX || + solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_QUEEN_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); + } - private EnumSet calculatePossibleTargets(BlockPos playerPos) { - boolean targetsBasedOnZoneWithoutCrystal = false; - EnumSet candidateTargets = EnumSet.allOf(CompassTarget.class); - EnumSet foundCrystals = this.foundCrystals.getAsCrystalEnumSet(); - Vec3Comparable playerPosVec = new Vec3Comparable(playerPos); - - // If the current zone's crystal hasn't been found then remove all non-nucleus candidates other - // than the ones in the current zone. The one exception is that the king is kept when in the jungle - // since the compass can point to the king if odawa is missing (which often happens). - // The nucleus is kept since it can be returned if the structure for the current zone is missing. - if (GOBLIN_HOLDOUT_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMBER)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.GOBLIN_KING); - candidateTargets.add(CompassTarget.GOBLIN_QUEEN); - targetsBasedOnZoneWithoutCrystal = true; - } - - if (JUNGLE_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.AMETHYST)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.ODAWA); - candidateTargets.add(CompassTarget.JUNGLE_TEMPLE); - if (!keyInInventory.getAsBoolean() && !kingsScentPresent.getAsBoolean()) { - // If Odawa is missing then the king may be returned - candidateTargets.add(CompassTarget.GOBLIN_KING); - } - targetsBasedOnZoneWithoutCrystal = true; + if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && + (solution.xCoord > JUNGLE_BB.maxX + JUNGLE_TEMPLE_BB.maxX || + solution.zCoord > JUNGLE_BB.maxZ + JUNGLE_TEMPLE_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); } - if (MITHRIL_DEPOSITS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.JADE)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.MINES_OF_DIVAN); - targetsBasedOnZoneWithoutCrystal = true; + if (solutionPossibleTargets.contains(CompassTarget.ODAWA) && + (solution.xCoord > JUNGLE_BB.maxX + ODAWA_BB.maxX || + solution.zCoord > JUNGLE_BB.maxZ + ODAWA_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.ODAWA); } - if (PRECURSOR_REMNANTS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.SAPPHIRE)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.PRECURSOR_CITY); - targetsBasedOnZoneWithoutCrystal = true; + if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && + (solution.xCoord < PRECURSOR_REMNANTS_BB.minX - PRECURSOR_CITY_BB.maxX || + solution.zCoord < PRECURSOR_REMNANTS_BB.minZ - PRECURSOR_CITY_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); } - if (MAGMA_FIELDS_BB.isVecInside(playerPosVec) && !foundCrystals.contains(Crystal.TOPAZ)) { - candidateTargets.clear(); - candidateTargets.add(CompassTarget.CRYSTAL_NUCLEUS); - candidateTargets.add(CompassTarget.BAL); - targetsBasedOnZoneWithoutCrystal = true; + if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && + (solution.xCoord < MITHRIL_DEPOSITS_BB.minX - MINES_OF_DIVAN_BB.maxX || + solution.zCoord > MITHRIL_DEPOSITS_BB.maxZ + MINES_OF_DIVAN_BB.maxZ)) { + solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); } - if (!targetsBasedOnZoneWithoutCrystal) { - // Filter out crystal-based targets outside the current zone - if (foundCrystals.contains(Crystal.AMBER)) { - candidateTargets.remove(CompassTarget.GOBLIN_KING); - candidateTargets.remove(CompassTarget.GOBLIN_QUEEN); - } + // Special case the Jungle Temple + if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && + solutionPossibleTargets.contains(CompassTarget.BAL) && + !foundCrystals.contains(Crystal.AMETHYST) && + compassUsedZone == HollowsZone.JUNGLE) { + solutionPossibleTargets.remove(CompassTarget.BAL); + } - if (foundCrystals.contains(Crystal.AMETHYST)) { - candidateTargets.remove(CompassTarget.ODAWA); - candidateTargets.remove(CompassTarget.JUNGLE_TEMPLE); - } + return solutionPossibleTargets; + } - if (foundCrystals.contains(Crystal.JADE)) { - candidateTargets.remove(CompassTarget.MINES_OF_DIVAN); - } + private EnumSet calculatePossibleTargets(BlockPos playerPos) { + EnumSet candidateTargets = EnumSet.of(CompassTarget.CRYSTAL_NUCLEUS); + EnumSet foundCrystals = this.foundCrystals.getAsCrystalEnumSet(); - if (foundCrystals.contains(Crystal.TOPAZ)) { - candidateTargets.remove(CompassTarget.BAL); + // Add targets based on missing crystals. + // NOTE: + // We used to assume that only the adjacent zone's targets could be returned. That turned + // out to be incorrect (e.g. a compass in the jungle pointed to the Precursor City when + // the king would have been a valid target). Now we assume that any structure could be + // missing (because Hypixel) and depend on the solution coordinates to filter the list. + for (Crystal crystal : Crystal.values()) { + if (foundCrystals.contains(crystal)) { + continue; } - if (foundCrystals.contains(Crystal.SAPPHIRE)) { - candidateTargets.remove(CompassTarget.PRECURSOR_CITY); + switch (crystal) { + case JADE: + candidateTargets.add(CompassTarget.MINES_OF_DIVAN); + break; + case AMBER: + candidateTargets.add( + kingsScentPresent.getAsBoolean() ? CompassTarget.GOBLIN_QUEEN : CompassTarget.GOBLIN_KING); + break; + case TOPAZ: + candidateTargets.add(CompassTarget.BAL); + break; + case AMETHYST: + candidateTargets.add( + keyInInventory.getAsBoolean() ? CompassTarget.JUNGLE_TEMPLE : CompassTarget.ODAWA); + break; + case SAPPHIRE: + candidateTargets.add(CompassTarget.PRECURSOR_CITY); + break; } } - candidateTargets.remove(kingsScentPresent.getAsBoolean() ? CompassTarget.GOBLIN_KING : CompassTarget.GOBLIN_QUEEN); - candidateTargets.remove(keyInInventory.getAsBoolean() ? CompassTarget.ODAWA : CompassTarget.JUNGLE_TEMPLE); - return candidateTargets; } @@ -633,7 +693,7 @@ public class CrystalWishingCompassSolver { } private String getNameForCompassTarget(CompassTarget compassTarget) { - boolean useSkytilsNames = (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassWaypointNameType == 1); + boolean useSkytilsNames = (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassWaypointNames == 1); switch (compassTarget) { case BAL: return useSkytilsNames ? "internal_bal" : "Bal"; case ODAWA: return "Odawa"; @@ -802,6 +862,14 @@ public class CrystalWishingCompassSolver { diagsMessage.append((solutionPossibleTargets == null) ? "" : solutionPossibleTargets.toString()); diagsMessage.append("\n"); + diagsMessage.append(EnumChatFormatting.AQUA); + diagsMessage.append("Seen particles:\n"); + for (ParticleData particleData : seenParticles) { + diagsMessage.append(EnumChatFormatting.WHITE); + diagsMessage.append(particleData); + diagsMessage.append("\n"); + } + return diagsMessage.toString(); } @@ -984,4 +1052,18 @@ public class CrystalWishingCompassSolver { } } } + + private static class ParticleData { + Vec3Comparable particleLocation; + long systemTime; + + public ParticleData(Vec3Comparable particleLocation, long systemTime) { + this.particleLocation = particleLocation; + this.systemTime = systemTime; + } + + public String toString() { + return "Location: " + particleLocation.toString() + ", systemTime: " + systemTime; + } + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java index f793baf0..9ff88089 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java @@ -668,14 +668,14 @@ public class Mining { @Expose @ConfigOption( - name = "Waypoint Type", - desc = "Skytils Waypoint name type. Skytils Built-in will be overwritten by Skytils when the waypoint is nearby." + name = "Waypoint Names", + desc = "NOTE: Skytils overwrites waypoint coordinates with less accurate values for Skytils names." ) @ConfigAccordionId(id = 7) @ConfigEditorDropdown( values = {"NEU", "Skytils"} ) - public int wishingCompassWaypointNameType = 0; + public int wishingCompassWaypointNames = 0; @Expose @ConfigOption( diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java index ed39a505..dff8749c 100644 --- a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java @@ -23,6 +23,7 @@ class CrystalWishingCompassSolverTest { private static final CrystalWishingCompassSolver solver = getInstance(); long systemTimeMillis; private final long DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE = 500L; + private final int CH_LOWEST_VALID_Y = 30; private final CompassUse minesOfDivanCompassUse1 = new CompassUse( 1647528732979L, @@ -326,7 +327,8 @@ class CrystalWishingCompassSolverTest { Vec3i magmaSolution = new Vec3i(737, 56, 444); - Vec3Comparable kingMinesOrNucleusCoordsInRemnants = new Vec3Comparable(604, 100, 681); + Vec3Comparable kingOdawaMinesOrNucleusCoordsInRemnants = new Vec3Comparable(566, 100, 566); + Vec3Comparable queenKingOdawaOrCityNucleusCoordsInMithrilDeposits = new Vec3Comparable(566, 130, 466); Vec3Comparable odawaSolution = new Vec3Comparable(349, 110, 390); private final CompassUse nucleusCompass = new CompassUse( @@ -473,6 +475,7 @@ class CrystalWishingCompassSolverTest { @Test void missing_repeating_particles_sets_state_to_failed_timeout_no_repeating() { + // Arrange CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); compassUse.particles.remove(compassUse.particles.size()-1); compassUse.particles.get(compassUse.particles.size()-1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; @@ -581,7 +584,8 @@ class CrystalWishingCompassSolverTest { // Arrange CompassUse compassUse1 = new CompassUse(minesOfDivanCompassUse1); CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); - Vec3 offset = new Vec3(0.0, 200.0, 0.0); + double invalidYOffset = -(minesOfDivanSolution.getY() - (CH_LOWEST_VALID_Y -1)); + Vec3 offset = new Vec3(0.0, invalidYOffset, 0.0); compassUse1.playerPos = compassUse1.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); for (ParticleSpawn particle : compassUse1.particles) { @@ -717,96 +721,35 @@ class CrystalWishingCompassSolverTest { } @Test - void possible_targets_only_contains_city_and_nucleus_when_in_remnants_without_sapphire_crystal() { + void possible_targets_contains_all_valid_targets_when_all_crystals_missing() { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(precursorCityCompassUse1)), Vec3i.NULL_VECTOR); + solver.foundCrystals = () -> EnumSet.noneOf(Crystal.class); + solver.keyInInventory = () -> false; + solver.kingsScentPresent = () -> false; // Act checkSolution(solution); EnumSet targets = solver.getPossibleTargets(); // Assert - Assertions.assertTrue(targets.contains(CompassTarget.PRECURSOR_CITY)); Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_mines_and_nucleus_when_in_deposits_without_jade_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert + Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); Assertions.assertTrue(targets.contains(CompassTarget.MINES_OF_DIVAN)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_king_or_queen_and_nucleus_when_in_holdout_without_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert - Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING) || - targets.contains(CompassTarget.GOBLIN_QUEEN)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); - } - - @Test - void possible_targets_only_contains_king_and_odawa_and_nucleus_when_in_jungle_without_crystal_or_key() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert Assertions.assertTrue(targets.contains(CompassTarget.GOBLIN_KING)); - Assertions.assertTrue(targets.contains(CompassTarget.ODAWA)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(3, targets.size()); - } - - @Test - void possible_targets_only_contains_bal_and_nucleus_when_in_magma_fields_without_crystal() { - // Arrange - Solution solution = new Solution( - new ArrayList<>(Collections.singletonList(magmaCompassUse1)), - Vec3i.NULL_VECTOR); - - // Act - checkSolution(solution); - EnumSet targets = solver.getPossibleTargets(); - - // Assert + Assertions.assertTrue(targets.contains(CompassTarget.PRECURSOR_CITY)); Assertions.assertTrue(targets.contains(CompassTarget.BAL)); - Assertions.assertTrue(targets.contains(CompassTarget.CRYSTAL_NUCLEUS)); - Assertions.assertEquals(2, targets.size()); + // No key or king's scent, so these should be false + Assertions.assertFalse(targets.contains(CompassTarget.JUNGLE_TEMPLE)); + Assertions.assertFalse(targets.contains(CompassTarget.GOBLIN_QUEEN)); } private void CheckExcludedTargetsForCrystals( - CompassUse compassUseToExecute, - ArrayList excludedTargets, - EnumSet foundCrystals) { + CompassUse compassUseToExecute, + ArrayList excludedTargets, + EnumSet foundCrystals) { // Arrange EnumSet targets; Solution solution = new Solution( @@ -838,39 +781,54 @@ class CrystalWishingCompassSolverTest { @Test void possible_targets_excludes_king_and_queen_when_amber_crystal_found() { + // Arrange ArrayList excludedTargets = new ArrayList<>(Arrays.asList( CompassTarget.GOBLIN_KING, CompassTarget.GOBLIN_QUEEN )); + + // Act & Assert CheckExcludedTargetsForCrystals(goblinHoldoutCompassUse1, excludedTargets, EnumSet.of(Crystal.AMBER)); } @Test void possible_targets_excludes_odawa_and_temple_when_amethyst_crystal_found() { + // Arrange ArrayList excludedTargets = new ArrayList<>(Arrays.asList( CompassTarget.ODAWA, CompassTarget.JUNGLE_TEMPLE)); + + // Act & Assert CheckExcludedTargetsForCrystals(jungleCompassUse1, excludedTargets, EnumSet.of(Crystal.AMETHYST)); } @Test void possible_targets_excludes_mines_when_jade_crystal_found() { + // Arrange ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( CompassTarget.MINES_OF_DIVAN)); + + // Act & Assert CheckExcludedTargetsForCrystals(minesOfDivanCompassUse1, excludedTargets, EnumSet.of(Crystal.JADE)); } @Test void possible_targets_excludes_city_when_sapphire_crystal_found() { + // Arrange ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( CompassTarget.PRECURSOR_CITY)); + + // Act & Assert CheckExcludedTargetsForCrystals(precursorCityCompassUse1, excludedTargets, EnumSet.of(Crystal.SAPPHIRE)); } @Test void possible_targets_excludes_bal_when_topaz_crystal_found() { + // Arrange ArrayList excludedTargets = new ArrayList<>(Collections.singletonList( CompassTarget.BAL)); + + // Act & Assert CheckExcludedTargetsForCrystals(magmaCompassUse1, excludedTargets, EnumSet.of(Crystal.TOPAZ)); } @@ -893,7 +851,7 @@ class CrystalWishingCompassSolverTest { } @Test - void solver_resets_when_possible_targets_change_based_on_location() { + void solver_resets_when_player_location_changes_zones() { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), @@ -910,6 +868,44 @@ class CrystalWishingCompassSolverTest { Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); } + @Test + void solver_resets_based_on_jungle_key_presence() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(jungleCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + solver.keyInInventory = () -> false; + checkSolution(solution); + systemTimeMillis += jungleCompassUse2.timeIncrementMillis; + solver.keyInInventory = () -> true; + HandleCompassResult handleCompassResult = solver.handleCompassUse(jungleCompassUse2.playerPos); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + + @Test + void solver_resets_based_on_kings_scent_presence() { + // Arrange + Solution solution = new Solution( + new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), + Vec3i.NULL_VECTOR); + + // Act + solver.kingsScentPresent = () -> false; + checkSolution(solution); + systemTimeMillis += goblinHoldoutCompassUse2.timeIncrementMillis; + solver.kingsScentPresent = () -> true; + HandleCompassResult handleCompassResult = solver.handleCompassUse(goblinHoldoutCompassUse2.playerPos); + + // Assert + Assertions.assertEquals(HandleCompassResult.POSSIBLE_TARGETS_CHANGED, handleCompassResult); + Assertions.assertEquals(SolverState.NOT_STARTED, solver.getSolverState()); + } + @Test void mines_of_divan_solution_is_solved() { // Arrange @@ -923,7 +919,7 @@ class CrystalWishingCompassSolverTest { } @Test - void jungle_temple_solution_with_key_in_inventory_is_solved() { + void jungle_temple_solution_with_key_in_inventory_is_solved_successfully_excluding_bal() { // Arrange Solution solution = new Solution( new ArrayList<>(Arrays.asList(jungleCompassUse1, jungleCompassUse2)), @@ -984,11 +980,17 @@ class CrystalWishingCompassSolverTest { } EnumSet GetSolutionTargetsHelper( + HollowsZone compassUsedZone, + EnumSet foundCrystals, EnumSet possibleTargets, Vec3Comparable solutionCoords, int expectedSolutionCount) { EnumSet solutionTargets = - CrystalWishingCompassSolver.getSolutionTargets(possibleTargets, solutionCoords); + CrystalWishingCompassSolver.getSolutionTargets( + compassUsedZone, + foundCrystals, + possibleTargets, + solutionCoords); Assertions.assertEquals(expectedSolutionCount, solutionTargets.size()); return solutionTargets; } @@ -997,133 +999,229 @@ class CrystalWishingCompassSolverTest { void solutionPossibleTargets_removes_nucleus_when_coords_not_in_nucleus() { // Arrange & Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.MITHRIL_DEPOSITS, + EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), new Vec3Comparable(minesOfDivanSolution), - 2); + 1); - //Assert + // Assert Assertions.assertFalse(solutionTargets.contains(CompassTarget.CRYSTAL_NUCLEUS)); } @Test - void solutionPossibleTargets_includes_adjacent_zones() { + void solutionPossibleTargets_includes_jungle_temple_and_bal_from_other_zones_when_overlapping() { + // Arrange + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + + // Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.GOBLIN_HOLDOUT, + EnumSet.of(Crystal.AMBER), + possibleTargets, + new Vec3Comparable(202, 72, 513), // upper left of Goblin Holdout + 2); + + // Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); + Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); + } + + @Test + void solutionPossibleTargets_includes_king_odawa_and_mines_of_divan_from_other_zones_when_overlapping() { // Arrange & Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.PRECURSOR_REMNANTS, + EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), - kingMinesOrNucleusCoordsInRemnants, - 2); + kingOdawaMinesOrNucleusCoordsInRemnants, + 3); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); + Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); } @Test - void solutionPossibleTargets_skips_y_filtering_when_single_possible_target() { - // Arrange & Act + void solutionPossibleTargets_includes_city_and_queen_from_other_zones_when_overlapping() { + // Arrange + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + possibleTargets.remove(CompassTarget.ODAWA); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( - EnumSet.of(CompassTarget.GOBLIN_QUEEN), - new Vec3Comparable(goblinHoldoutKingSolution), // Coords not valid for queen - 1); + HollowsZone.MITHRIL_DEPOSITS, + EnumSet.noneOf(Crystal.class), + possibleTargets, + queenKingOdawaOrCityNucleusCoordsInMithrilDeposits, + 2); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); + Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); + } + + @Test + void solutionPossibleTargets_excludes_jungle_temple_from_other_zone_when_not_overlapping() { + // Arrange + Vec3Comparable notOverlapping = new Vec3Comparable(202, 72, 513+110); // upper left of Goblin Holdout + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.ODAWA); + + // Act + EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.GOBLIN_HOLDOUT, + EnumSet.of(Crystal.AMBER), + possibleTargets, + notOverlapping, + 1); + + // Assert + Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); } @Test - void solutionPossibleTargets_still_filters_non_adjacent_when_single_possible_target() { - // Arrange, Act and Assert - GetSolutionTargetsHelper( - EnumSet.of(CompassTarget.ODAWA), - kingMinesOrNucleusCoordsInRemnants, + void solutionPossibleTargets_excludes_king_odawa_and_mines_of_divan_from_other_zones_when_not_overlapping() { + // Arrange + Vec3Comparable notOverlapping = kingOdawaMinesOrNucleusCoordsInRemnants.addVector(100, 0, 100); + + // Act & Assert + EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.PRECURSOR_REMNANTS, + EnumSet.noneOf(Crystal.class), + EnumSet.allOf(CompassTarget.class), + notOverlapping, + 0); + } + + @Test + void solutionPossibleTargets_excludes_city_and_queen_from_other_zones_when_not_overlapping() { + // Arrange + Vec3Comparable notOverlapping = queenKingOdawaOrCityNucleusCoordsInMithrilDeposits.addVector(100, 0, -100); + EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); + possibleTargets.remove(CompassTarget.GOBLIN_KING); + possibleTargets.remove(CompassTarget.ODAWA); + + // Act & Assert + EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.MITHRIL_DEPOSITS, + EnumSet.noneOf(Crystal.class), + possibleTargets, + notOverlapping, 0); } @Test void solutionPossibleTargets_includes_king_based_on_y_coordinate() { - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.ODAWA); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.GOBLIN_HOLDOUT, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(goblinHoldoutKingSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); } @Test void solutionPossibleTargets_includes_odawa_based_on_y_coordinate() { - // Arrange & Act - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.GOBLIN_KING); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.JUNGLE, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(odawaSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); } @Test void solutionPossibleTargets_includes_mines_based_on_y_coordinate() { - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.ODAWA); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.MITHRIL_DEPOSITS, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(minesOfDivanSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); } @Test void solutionPossibleTargets_includes_temple_based_on_y_coordinate() { - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.BAL); possibleTargets.remove(CompassTarget.ODAWA); possibleTargets.remove(CompassTarget.GOBLIN_KING); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.JUNGLE, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(jungleSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); } @Test void solutionPossibleTargets_includes_queen_based_on_y_coordinate() { - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.GOBLIN_KING); possibleTargets.remove(CompassTarget.ODAWA); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.GOBLIN_HOLDOUT, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(goblinHoldoutQueenSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); } @Test void solutionPossibleTargets_includes_city_based_on_y_coordinate() { - // Arrange & Act + // Arrange EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.GOBLIN_KING); + + // Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.PRECURSOR_REMNANTS, + EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(precursorCitySolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); } @@ -1131,11 +1229,13 @@ class CrystalWishingCompassSolverTest { void solutionPossibleTargets_includes_bal_based_on_y_coordinate() { // Arrange & Act EnumSet solutionTargets = GetSolutionTargetsHelper( + HollowsZone.MAGMA_FIELDS, + EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), new Vec3Comparable(magmaSolution), 1); - //Assert + // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); } -- cgit From 50dc2122462642a0c3a00b3a3ae6389825dc04df Mon Sep 17 00:00:00 2001 From: IRONM00N <64110067+IRONM00N@users.noreply.github.com> Date: Thu, 9 Jun 2022 18:04:22 -0400 Subject: Re-license project as LGPL (#157) * add licence files & a few misc chores * add license notices & run auto formatter --- .github/workflows/build.yml | 6 +- .github/workflows/send_webhook_update.sh | 19 + .gitignore | 1 + .idea/copyright/NotEnoughUpdates.xml | 7 + .idea/copyright/profiles_settings.xml | 7 + CONTRIBUTING.md | 36 +- LICENSE | 60 - LICENSE-GPLv3.md | 675 + LICENSE.md | 157 + README.md | 12 +- Update Notes/2.0-Pre30.md | 9 +- Update Notes/2.0-Pre31-Release.md | 13 +- Update Notes/2.0-Pre31.md | 11 +- Update Notes/2.1.md | 23 +- build.gradle.kts | 21 +- settings.gradle.kts | 21 +- src/main/java/NotSkyblockAddonsInstallerFrame.java | 27 +- .../moulberry/notenoughupdates/CustomItems.java | 19 + .../notenoughupdates/ItemPriceInformation.java | 20 +- .../github/moulberry/notenoughupdates/NEUApi.java | 20 +- .../moulberry/notenoughupdates/NEUManager.java | 19 + .../moulberry/notenoughupdates/NEUOverlay.java | 19 + .../notenoughupdates/NEURepoResourcePack.java | 126 +- .../notenoughupdates/NotEnoughUpdates.java | 19 + .../notenoughupdates/auction/APIManager.java | 32 +- .../notenoughupdates/auction/CustomAH.java | 19 + .../notenoughupdates/auction/CustomAHGui.java | 19 + .../commands/ClientCommandBase.java | 19 + .../notenoughupdates/commands/Commands.java | 34 +- .../commands/EntityViewerCommand.java | 121 +- .../notenoughupdates/commands/ScreenCommand.java | 19 + .../commands/dev/DevTestCommand.java | 19 + .../notenoughupdates/commands/dev/DiagCommand.java | 22 +- .../commands/dev/DungeonWinTestCommand.java | 19 + .../commands/dev/NullzeeSphereCommand.java | 19 + .../commands/dev/PackDevCommand.java | 87 +- .../commands/dev/ReloadRepoCommand.java | 19 + .../commands/dev/ResetRepoCommand.java | 19 + .../commands/dev/StatsCommand.java | 19 + .../commands/dungeon/DhCommand.java | 19 + .../commands/dungeon/DnCommand.java | 19 + .../commands/dungeon/JoinDungeonCommand.java | 19 + .../commands/dungeon/MapCommand.java | 19 + .../commands/help/FeaturesCommand.java | 19 + .../commands/help/HelpCommand.java | 21 +- .../commands/help/LinksCommand.java | 19 + .../commands/help/SettingsCommand.java | 19 + .../commands/help/StorageViewerWhyCommand.java | 19 + .../notenoughupdates/commands/misc/AhCommand.java | 19 + .../commands/misc/ButtonsCommand.java | 19 + .../commands/misc/CalendarCommand.java | 19 + .../commands/misc/CosmeticsCommand.java | 19 + .../commands/misc/CustomizeCommand.java | 20 +- .../commands/profile/CataCommand.java | 19 + .../commands/profile/PeekCommand.java | 19 + .../commands/profile/PvCommand.java | 19 + .../commands/profile/ViewProfileCommand.java | 19 + .../notenoughupdates/core/BackgroundBlur.java | 19 + .../notenoughupdates/core/ChromaColour.java | 19 + .../notenoughupdates/core/GlScissorStack.java | 19 + .../notenoughupdates/core/GuiElement.java | 19 + .../notenoughupdates/core/GuiElementBoolean.java | 19 + .../notenoughupdates/core/GuiElementColour.java | 19 + .../notenoughupdates/core/GuiElementTextField.java | 19 + .../core/GuiScreenElementWrapper.java | 19 + .../notenoughupdates/core/config/Config.java | 19 + .../core/config/GuiPositionEditor.java | 19 + .../core/config/KeybindHelper.java | 19 + .../notenoughupdates/core/config/Position.java | 19 + .../notenoughupdates/core/config/PositionNew.java | 19 + .../core/config/annotations/Category.java | 19 + .../core/config/annotations/ConfigAccordionId.java | 19 + .../config/annotations/ConfigEditorAccordion.java | 19 + .../config/annotations/ConfigEditorBoolean.java | 19 + .../config/annotations/ConfigEditorButton.java | 19 + .../config/annotations/ConfigEditorColour.java | 19 + .../annotations/ConfigEditorDraggableList.java | 20 + .../config/annotations/ConfigEditorDropdown.java | 19 + .../core/config/annotations/ConfigEditorFSR.java | 19 + .../config/annotations/ConfigEditorKeybind.java | 19 + .../config/annotations/ConfigEditorSlider.java | 19 + .../core/config/annotations/ConfigEditorText.java | 19 + .../core/config/annotations/ConfigOption.java | 19 + .../core/config/gui/GuiOptionEditor.java | 19 + .../core/config/gui/GuiOptionEditorAccordion.java | 19 + .../core/config/gui/GuiOptionEditorBoolean.java | 21 +- .../core/config/gui/GuiOptionEditorButton.java | 19 + .../core/config/gui/GuiOptionEditorColour.java | 19 + .../config/gui/GuiOptionEditorDraggableList.java | 19 + .../core/config/gui/GuiOptionEditorDropdown.java | 19 + .../core/config/gui/GuiOptionEditorFSR.java | 19 + .../core/config/gui/GuiOptionEditorKeybind.java | 19 + .../core/config/gui/GuiOptionEditorSlider.java | 19 + .../core/config/gui/GuiOptionEditorText.java | 19 + .../core/config/gui/GuiPositionEditor.java | 19 + .../core/config/struct/ConfigProcessor.java | 51 +- .../core/util/GuiElementSlider.java | 27 +- .../moulberry/notenoughupdates/core/util/Line.java | 53 +- .../notenoughupdates/core/util/MiscUtils.java | 19 + .../notenoughupdates/core/util/Splitters.java | 19 + .../notenoughupdates/core/util/StringUtils.java | 19 + .../notenoughupdates/core/util/Vec3Comparable.java | 37 +- .../notenoughupdates/core/util/lerp/LerpUtils.java | 19 + .../core/util/lerp/LerpingFloat.java | 19 + .../core/util/lerp/LerpingInteger.java | 19 + .../core/util/render/RenderUtils.java | 19 + .../core/util/render/TextRenderUtils.java | 19 + .../notenoughupdates/cosmetics/CapeManager.java | 19 + .../notenoughupdates/cosmetics/CapeNode.java | 21 +- .../notenoughupdates/cosmetics/GuiCosmetics.java | 19 + .../notenoughupdates/cosmetics/NEUCape.java | 19 + .../notenoughupdates/cosmetics/ShaderManager.java | 19 + .../notenoughupdates/dungeons/DungeonBlocks.java | 19 + .../notenoughupdates/dungeons/DungeonMap.java | 26 +- .../notenoughupdates/dungeons/DungeonWin.java | 37 +- .../dungeons/GuiDungeonMapEditor.java | 29 +- .../notenoughupdates/events/NEUEvent.java | 19 + .../events/OnBlockBreakSoundEffect.java | 20 +- .../events/RepositoryReloadEvent.java | 19 + .../notenoughupdates/infopanes/DevInfoPane.java | 19 + .../infopanes/FlipperInfoPane.java | 19 + .../notenoughupdates/infopanes/HTMLInfoPane.java | 30 +- .../notenoughupdates/infopanes/InfoPane.java | 19 + .../infopanes/ScrollableInfoPane.java | 19 + .../notenoughupdates/infopanes/TextInfoPane.java | 19 + .../notenoughupdates/itemeditor/GuiElement.java | 19 + .../itemeditor/GuiElementButton.java | 19 + .../itemeditor/GuiElementText.java | 19 + .../itemeditor/GuiElementTextField.java | 19 + .../notenoughupdates/itemeditor/NEUItemEditor.java | 19 + .../notenoughupdates/listener/ChatListener.java | 35 +- .../listener/ItemTooltipListener.java | 20 +- .../listener/NEUEventListener.java | 19 + .../listener/OldAnimationChecker.java | 19 + .../notenoughupdates/listener/RenderListener.java | 31 +- .../listener/ScoreboardLocationChangeListener.java | 19 + .../notenoughupdates/mbgui/MBAnchorPoint.java | 19 + .../notenoughupdates/mbgui/MBDeserializer.java | 19 + .../notenoughupdates/mbgui/MBGuiElement.java | 19 + .../notenoughupdates/mbgui/MBGuiGroup.java | 19 + .../notenoughupdates/mbgui/MBGuiGroupAligned.java | 19 + .../notenoughupdates/mbgui/MBGuiGroupFloating.java | 25 +- .../miscfeatures/AuctionBINWarning.java | 19 + .../miscfeatures/AuctionSortModeWarning.java | 24 +- .../miscfeatures/BetterContainers.java | 19 + .../miscfeatures/CookieWarning.java | 54 +- .../miscfeatures/CrystalMetalDetectorSolver.java | 136 +- .../miscfeatures/CrystalOverlay.java | 19 + .../miscfeatures/CrystalWishingCompassSolver.java | 254 +- .../miscfeatures/CustomItemEffects.java | 41 +- .../miscfeatures/CustomSkulls.java | 38 +- .../miscfeatures/DamageCommas.java | 19 + .../miscfeatures/DwarvenMinesWaypoints.java | 19 + .../miscfeatures/EnchantingSolvers.java | 25 +- .../notenoughupdates/miscfeatures/FairySouls.java | 33 +- .../miscfeatures/FishingHelper.java | 19 + .../miscfeatures/ItemCooldowns.java | 19 + .../miscfeatures/ItemCustomizeManager.java | 27 +- .../miscfeatures/ItemRarityHalo.java | 25 +- .../notenoughupdates/miscfeatures/MiningStuff.java | 19 + .../miscfeatures/NPCRetexturing.java | 19 + .../notenoughupdates/miscfeatures/Navigation.java | 19 + .../miscfeatures/NullzeeSphere.java | 19 + .../miscfeatures/PetInfoOverlay.java | 19 + .../notenoughupdates/miscfeatures/SlotLocking.java | 35 +- .../miscfeatures/StorageManager.java | 53 +- .../miscfeatures/StreamerMode.java | 19 + .../notenoughupdates/miscfeatures/SunTzu.java | 19 + .../customblockzones/CrystalHollowsTextures.java | 19 + .../customblockzones/CustomBiomes.java | 19 + .../customblockzones/CustomBlockSounds.java | 20 +- .../customblockzones/DwarvenMinesTextures.java | 19 + .../customblockzones/IslandZoneSubdivider.java | 19 + .../customblockzones/LocationChangeEvent.java | 19 + .../customblockzones/SpecialBlockZone.java | 19 + .../miscfeatures/entityviewer/AgeModifier.java | 55 +- .../miscfeatures/entityviewer/ChargedModifier.java | 35 +- .../miscfeatures/entityviewer/EntityViewer.java | 366 +- .../entityviewer/EntityViewerModifier.java | 21 +- .../entityviewer/EquipmentModifier.java | 19 + .../miscfeatures/entityviewer/GUIClientPlayer.java | 71 +- .../miscfeatures/entityviewer/HorseModifier.java | 19 + .../entityviewer/InvisibleModifier.java | 29 +- .../miscfeatures/entityviewer/NameModifier.java | 19 + .../miscfeatures/entityviewer/RidingModifier.java | 33 +- .../miscfeatures/entityviewer/SkinModifier.java | 87 +- .../miscfeatures/entityviewer/WitherModifier.java | 61 +- .../miscgui/AccessoryBagOverlay.java | 99 +- .../notenoughupdates/miscgui/CalendarOverlay.java | 26 +- .../notenoughupdates/miscgui/GuiCustomEnchant.java | 28 +- .../notenoughupdates/miscgui/GuiEnchantColour.java | 25 +- .../miscgui/GuiInvButtonEditor.java | 20 +- .../notenoughupdates/miscgui/GuiItemCustomize.java | 19 + .../notenoughupdates/miscgui/GuiItemRecipe.java | 19 + .../notenoughupdates/miscgui/GuiNavigation.java | 19 + .../notenoughupdates/miscgui/GuiPriceGraph.java | 50 +- .../miscgui/InventoryStorageSelector.java | 19 + .../notenoughupdates/miscgui/KatSitterOverlay.java | 36 +- .../miscgui/NEUOverlayPlacements.java | 19 + .../notenoughupdates/miscgui/StorageOverlay.java | 19 + .../notenoughupdates/miscgui/TradeWindow.java | 26 +- .../miscgui/tutorials/NeuConfigTutorial.java | 19 + .../miscgui/tutorials/NeuTutorial.java | 19 + .../miscgui/tutorials/TutorialBase.java | 19 + .../mixins/AccessorEntityAgeable.java | 25 +- .../mixins/AccessorEntityArmorStand.java | 23 +- .../mixins/AccessorGuiContainer.java | 47 +- .../mixins/AccessorGuiEditSign.java | 23 +- .../mixins/AccessorGuiPlayerTabOverlay.java | 19 + .../notenoughupdates/mixins/AccessorMinecraft.java | 23 +- .../mixins/MixinAbstractClientPlayer.java | 19 + .../notenoughupdates/mixins/MixinContainer.java | 19 + .../mixins/MixinEffectRenderer.java | 19 + .../notenoughupdates/mixins/MixinEntity.java | 19 + .../mixins/MixinEntityAgeable.java | 20 +- .../notenoughupdates/mixins/MixinEntityHorse.java | 31 +- .../notenoughupdates/mixins/MixinEntityPlayer.java | 19 + .../mixins/MixinEntityPlayerSP.java | 19 + .../mixins/MixinEntityRenderer.java | 19 + .../mixins/MixinEntitySkeleton.java | 31 +- .../notenoughupdates/mixins/MixinGuiChest.java | 19 + .../notenoughupdates/mixins/MixinGuiContainer.java | 26 +- .../notenoughupdates/mixins/MixinGuiIngame.java | 19 + .../notenoughupdates/mixins/MixinGuiInventory.java | 19 + .../notenoughupdates/mixins/MixinGuiScreen.java | 19 + .../mixins/MixinInventoryEffectRenderer.java | 19 + .../mixins/MixinInventoryPlayer.java | 19 + .../mixins/MixinItemCameraTransforms.java | 19 + .../notenoughupdates/mixins/MixinItemRenderer.java | 19 + .../notenoughupdates/mixins/MixinItemStack.java | 19 + .../mixins/MixinLayerArmorBase.java | 19 + .../mixins/MixinLayerCustomHead.java | 19 + .../notenoughupdates/mixins/MixinMinecraft.java | 19 + .../notenoughupdates/mixins/MixinMouseHelper.java | 19 + .../mixins/MixinNetHandlerPlayClient.java | 37 +- .../mixins/MixinPlayerControllerMP.java | 19 + .../notenoughupdates/mixins/MixinRender.java | 19 + .../notenoughupdates/mixins/MixinRenderFish.java | 21 +- .../notenoughupdates/mixins/MixinRenderGlobal.java | 19 + .../notenoughupdates/mixins/MixinRenderItem.java | 19 + .../notenoughupdates/mixins/MixinRenderList.java | 19 + .../mixins/MixinRendererLivingEntity.java | 19 + .../mixins/MixinTextureManager.java | 19 + .../mixins/MixinTileEntitySkullRenderer.java | 19 + .../mixins/MixinTileEntitySpecialRenderer.java | 19 + .../mixins/MixinVboRenderList.java | 19 + .../notenoughupdates/mixins/MixinWorld.java | 21 +- .../notenoughupdates/mixins/MixinWorldClient.java | 19 + .../notenoughupdates/options/NEUConfig.java | 19 + .../notenoughupdates/options/NEUConfigEditor.java | 19 + .../options/customtypes/NEUDebugFlag.java | 21 +- .../options/seperateSections/AHGraph.java | 26 +- .../options/seperateSections/AHTweaks.java | 25 +- .../options/seperateSections/AccessoryBag.java | 19 + .../options/seperateSections/ApiData.java | 19 + .../options/seperateSections/Calendar.java | 19 + .../options/seperateSections/CustomArmour.java | 19 + .../options/seperateSections/DungeonMapConfig.java | 19 + .../options/seperateSections/Dungeons.java | 29 +- .../options/seperateSections/Enchanting.java | 25 +- .../options/seperateSections/Fishing.java | 19 + .../options/seperateSections/ImprovedSBMenu.java | 19 + .../options/seperateSections/InventoryButtons.java | 19 + .../options/seperateSections/ItemOverlays.java | 29 +- .../options/seperateSections/Itemlist.java | 25 +- .../options/seperateSections/LocationEdit.java | 24 +- .../options/seperateSections/Mining.java | 28 +- .../options/seperateSections/Misc.java | 19 + .../options/seperateSections/MiscOverlays.java | 35 +- .../options/seperateSections/NeuAuctionHouse.java | 19 + .../options/seperateSections/Notifications.java | 19 + .../options/seperateSections/PetOverlay.java | 25 +- .../options/seperateSections/ProfileViewer.java | 25 +- .../options/seperateSections/SkillOverlays.java | 30 +- .../options/seperateSections/SlayerOverlay.java | 26 +- .../options/seperateSections/SlotLocking.java | 25 +- .../options/seperateSections/StorageGUI.java | 29 +- .../options/seperateSections/Toolbar.java | 27 +- .../options/seperateSections/TooltipTweaks.java | 19 + .../options/seperateSections/TradeMenu.java | 19 + .../overlays/AuctionSearchOverlay.java | 35 +- .../overlays/BonemerangOverlay.java | 25 +- .../overlays/CombatSkillOverlay.java | 21 +- .../overlays/CrystalHollowOverlay.java | 33 +- .../notenoughupdates/overlays/FarmingOverlay.java | 19 + .../overlays/FishingSkillOverlay.java | 21 +- .../notenoughupdates/overlays/FuelBar.java | 19 + .../notenoughupdates/overlays/MiningOverlay.java | 37 +- .../overlays/MiningSkillOverlay.java | 21 +- .../notenoughupdates/overlays/OverlayManager.java | 19 + .../overlays/RancherBootOverlay.java | 19 + .../notenoughupdates/overlays/SlayerOverlay.java | 25 +- .../notenoughupdates/overlays/TextOverlay.java | 19 + .../overlays/TextOverlayStyle.java | 19 + .../notenoughupdates/overlays/TimersOverlay.java | 28 +- .../notenoughupdates/profileviewer/BingoPage.java | 19 + .../profileviewer/GuiProfileViewer.java | 19 + .../notenoughupdates/profileviewer/Panorama.java | 20 +- .../profileviewer/PlayerStats.java | 20 + .../profileviewer/ProfileViewer.java | 35 +- .../notenoughupdates/recipes/CraftingOverlay.java | 37 +- .../notenoughupdates/recipes/CraftingRecipe.java | 282 +- .../notenoughupdates/recipes/ForgeRecipe.java | 477 +- .../notenoughupdates/recipes/Ingredient.java | 21 +- .../notenoughupdates/recipes/ItemShopRecipe.java | 19 + .../notenoughupdates/recipes/MobLootRecipe.java | 19 + .../notenoughupdates/recipes/NeuRecipe.java | 19 + .../notenoughupdates/recipes/RecipeGenerator.java | 19 + .../notenoughupdates/recipes/RecipeSlot.java | 19 + .../notenoughupdates/recipes/RecipeType.java | 19 + .../recipes/VillagerTradeRecipe.java | 288 +- .../notenoughupdates/util/AllowEmptyHTMLTag.java | 19 + .../moulberry/notenoughupdates/util/Constants.java | 19 + .../moulberry/notenoughupdates/util/Debouncer.java | 19 + .../util/DiscordMarkdownBuilder.java | 19 + .../notenoughupdates/util/GuiTextures.java | 19 + .../notenoughupdates/util/HastebinUploader.java | 19 + .../notenoughupdates/util/HotmInformation.java | 19 + .../notenoughupdates/util/HypixelApi.java | 19 + .../moulberry/notenoughupdates/util/ItemUtils.java | 19 + .../moulberry/notenoughupdates/util/JsonUtils.java | 19 + .../notenoughupdates/util/LerpingFloat.java | 19 + .../notenoughupdates/util/NEUDebugLogger.java | 21 +- .../notenoughupdates/util/NEUResourceManager.java | 19 + .../notenoughupdates/util/NotificationHandler.java | 19 + .../notenoughupdates/util/ProfileApiSyncer.java | 19 + .../util/RequestFocusListener.java | 19 + .../util/ReverseWorldRenderer.java | 28 +- .../moulberry/notenoughupdates/util/SBInfo.java | 30 +- .../notenoughupdates/util/SkytilsCompat.java | 23 +- .../notenoughupdates/util/SpecialColour.java | 19 + .../moulberry/notenoughupdates/util/TexLoc.java | 19 + .../moulberry/notenoughupdates/util/Utils.java | 19 + .../notenoughupdates/util/XPInformation.java | 19 + .../resources/assets/notenoughupdates/dream.json | 88 +- .../dungeon_map/borders/large/1.json | 4 +- .../dungeon_map/borders/large/10.json | 4 +- .../dungeon_map/borders/large/11.json | 4 +- .../dungeon_map/borders/large/2.json | 4 +- .../dungeon_map/borders/large/3.json | 4 +- .../dungeon_map/borders/large/4.json | 4 +- .../dungeon_map/borders/large/5.json | 4 +- .../dungeon_map/borders/large/6.json | 4 +- .../dungeon_map/borders/large/7.json | 4 +- .../dungeon_map/borders/large/8.json | 4 +- .../dungeon_map/borders/large/9.json | 4 +- .../dungeon_map/borders/medium/1.json | 4 +- .../dungeon_map/borders/medium/10.json | 4 +- .../dungeon_map/borders/medium/11.json | 4 +- .../dungeon_map/borders/medium/2.json | 4 +- .../dungeon_map/borders/medium/3.json | 4 +- .../dungeon_map/borders/medium/4.json | 4 +- .../dungeon_map/borders/medium/5.json | 4 +- .../dungeon_map/borders/medium/6.json | 4 +- .../dungeon_map/borders/medium/7.json | 4 +- .../dungeon_map/borders/medium/8.json | 4 +- .../dungeon_map/borders/medium/9.json | 4 +- .../dungeon_map/borders/small/1.json | 4 +- .../dungeon_map/borders/small/10.json | 4 +- .../dungeon_map/borders/small/11.json | 4 +- .../dungeon_map/borders/small/2.json | 4 +- .../dungeon_map/borders/small/3.json | 4 +- .../dungeon_map/borders/small/4.json | 4 +- .../dungeon_map/borders/small/5.json | 4 +- .../dungeon_map/borders/small/6.json | 4 +- .../dungeon_map/borders/small/7.json | 4 +- .../dungeon_map/borders/small/8.json | 4 +- .../dungeon_map/borders/small/9.json | 4 +- .../notenoughupdates/dwarven_data/-10_-1.json | 9 +- .../notenoughupdates/dwarven_data/-10_-2.json | 17 +- .../notenoughupdates/dwarven_data/-10_-3.json | 15 +- .../notenoughupdates/dwarven_data/-10_-4.json | 37 +- .../notenoughupdates/dwarven_data/-10_-5.json | 13 +- .../notenoughupdates/dwarven_data/-10_-6.json | 32 +- .../notenoughupdates/dwarven_data/-10_-7.json | 8 +- .../notenoughupdates/dwarven_data/-10_0.json | 28 +- .../notenoughupdates/dwarven_data/-10_3.json | 102 +- .../notenoughupdates/dwarven_data/-10_4.json | 96 +- .../notenoughupdates/dwarven_data/-10_6.json | 220 +- .../notenoughupdates/dwarven_data/-10_7.json | 245 +- .../notenoughupdates/dwarven_data/-10_8.json | 90 +- .../notenoughupdates/dwarven_data/-11_-3.json | 189 +- .../notenoughupdates/dwarven_data/-11_-4.json | 21 +- .../notenoughupdates/dwarven_data/-11_-5.json | 26 +- .../notenoughupdates/dwarven_data/-11_-6.json | 12 +- .../notenoughupdates/dwarven_data/-11_2.json | 24 +- .../notenoughupdates/dwarven_data/-11_5.json | 30 +- .../notenoughupdates/dwarven_data/-11_6.json | 86 +- .../notenoughupdates/dwarven_data/-11_7.json | 16 +- .../assets/notenoughupdates/dwarven_data/-1_0.json | 59 +- .../assets/notenoughupdates/dwarven_data/-1_1.json | 67 +- .../notenoughupdates/dwarven_data/-1_10.json | 52 +- .../notenoughupdates/dwarven_data/-1_11.json | 68 +- .../assets/notenoughupdates/dwarven_data/-1_3.json | 17 +- .../assets/notenoughupdates/dwarven_data/-1_7.json | 25 +- .../assets/notenoughupdates/dwarven_data/-1_8.json | 41 +- .../assets/notenoughupdates/dwarven_data/-1_9.json | 42 +- .../notenoughupdates/dwarven_data/-2_-2.json | 27 +- .../notenoughupdates/dwarven_data/-2_-3.json | 109 +- .../notenoughupdates/dwarven_data/-2_-4.json | 206 +- .../notenoughupdates/dwarven_data/-2_-5.json | 173 +- .../notenoughupdates/dwarven_data/-2_-7.json | 87 +- .../assets/notenoughupdates/dwarven_data/-2_0.json | 62 +- .../notenoughupdates/dwarven_data/-2_10.json | 60 +- .../notenoughupdates/dwarven_data/-2_11.json | 18 +- .../assets/notenoughupdates/dwarven_data/-2_3.json | 4 +- .../assets/notenoughupdates/dwarven_data/-2_4.json | 194 +- .../assets/notenoughupdates/dwarven_data/-2_6.json | 221 +- .../assets/notenoughupdates/dwarven_data/-2_7.json | 11 +- .../assets/notenoughupdates/dwarven_data/-2_8.json | 49 +- .../assets/notenoughupdates/dwarven_data/-2_9.json | 48 +- .../notenoughupdates/dwarven_data/-3_-3.json | 13 +- .../notenoughupdates/dwarven_data/-3_-4.json | 34 +- .../notenoughupdates/dwarven_data/-3_-5.json | 36 +- .../assets/notenoughupdates/dwarven_data/-3_0.json | 84 +- .../assets/notenoughupdates/dwarven_data/-3_1.json | 87 +- .../notenoughupdates/dwarven_data/-3_11.json | 5 +- .../assets/notenoughupdates/dwarven_data/-3_2.json | 7 +- .../assets/notenoughupdates/dwarven_data/-3_4.json | 168 +- .../assets/notenoughupdates/dwarven_data/-3_5.json | 72 +- .../assets/notenoughupdates/dwarven_data/-3_6.json | 134 +- .../assets/notenoughupdates/dwarven_data/-3_7.json | 5 +- .../assets/notenoughupdates/dwarven_data/-3_8.json | 37 +- .../assets/notenoughupdates/dwarven_data/-3_9.json | 25 +- .../notenoughupdates/dwarven_data/-4_-1.json | 51 +- .../notenoughupdates/dwarven_data/-4_-5.json | 21 +- .../notenoughupdates/dwarven_data/-4_-6.json | 22 +- .../assets/notenoughupdates/dwarven_data/-4_0.json | 103 +- .../assets/notenoughupdates/dwarven_data/-4_1.json | 29 +- .../notenoughupdates/dwarven_data/-4_10.json | 200 +- .../notenoughupdates/dwarven_data/-4_11.json | 14 +- .../assets/notenoughupdates/dwarven_data/-4_2.json | 22 +- .../assets/notenoughupdates/dwarven_data/-4_3.json | 38 +- .../assets/notenoughupdates/dwarven_data/-4_4.json | 12 +- .../assets/notenoughupdates/dwarven_data/-4_5.json | 15 +- .../assets/notenoughupdates/dwarven_data/-4_6.json | 26 +- .../assets/notenoughupdates/dwarven_data/-4_7.json | 16 +- .../assets/notenoughupdates/dwarven_data/-4_8.json | 77 +- .../assets/notenoughupdates/dwarven_data/-4_9.json | 43 +- .../notenoughupdates/dwarven_data/-5_-1.json | 57 +- .../notenoughupdates/dwarven_data/-5_-2.json | 54 +- .../notenoughupdates/dwarven_data/-5_-3.json | 51 +- .../notenoughupdates/dwarven_data/-5_-4.json | 144 +- .../notenoughupdates/dwarven_data/-5_-5.json | 7 +- .../notenoughupdates/dwarven_data/-5_-6.json | 65 +- .../assets/notenoughupdates/dwarven_data/-5_0.json | 103 +- .../assets/notenoughupdates/dwarven_data/-5_1.json | 59 +- .../notenoughupdates/dwarven_data/-5_10.json | 177 +- .../assets/notenoughupdates/dwarven_data/-5_2.json | 41 +- .../assets/notenoughupdates/dwarven_data/-5_4.json | 11 +- .../assets/notenoughupdates/dwarven_data/-5_6.json | 5 +- .../assets/notenoughupdates/dwarven_data/-5_7.json | 33 +- .../assets/notenoughupdates/dwarven_data/-5_8.json | 184 +- .../assets/notenoughupdates/dwarven_data/-5_9.json | 230 +- .../notenoughupdates/dwarven_data/-6_-3.json | 23 +- .../notenoughupdates/dwarven_data/-6_-4.json | 107 +- .../notenoughupdates/dwarven_data/-6_-5.json | 103 +- .../notenoughupdates/dwarven_data/-6_-6.json | 22 +- .../assets/notenoughupdates/dwarven_data/-6_0.json | 36 +- .../assets/notenoughupdates/dwarven_data/-6_1.json | 99 +- .../assets/notenoughupdates/dwarven_data/-6_2.json | 20 +- .../assets/notenoughupdates/dwarven_data/-6_4.json | 142 +- .../assets/notenoughupdates/dwarven_data/-6_5.json | 179 +- .../assets/notenoughupdates/dwarven_data/-6_6.json | 115 +- .../assets/notenoughupdates/dwarven_data/-6_7.json | 137 +- .../assets/notenoughupdates/dwarven_data/-6_8.json | 263 +- .../assets/notenoughupdates/dwarven_data/-6_9.json | 257 +- .../notenoughupdates/dwarven_data/-7_-1.json | 140 +- .../notenoughupdates/dwarven_data/-7_-2.json | 150 +- .../notenoughupdates/dwarven_data/-7_-3.json | 72 +- .../notenoughupdates/dwarven_data/-7_-4.json | 62 +- .../notenoughupdates/dwarven_data/-7_-5.json | 73 +- .../notenoughupdates/dwarven_data/-7_-6.json | 37 +- .../assets/notenoughupdates/dwarven_data/-7_0.json | 153 +- .../assets/notenoughupdates/dwarven_data/-7_1.json | 168 +- .../assets/notenoughupdates/dwarven_data/-7_2.json | 101 +- .../assets/notenoughupdates/dwarven_data/-7_3.json | 123 +- .../assets/notenoughupdates/dwarven_data/-7_4.json | 34 +- .../assets/notenoughupdates/dwarven_data/-7_8.json | 218 +- .../assets/notenoughupdates/dwarven_data/-7_9.json | 317 +- .../notenoughupdates/dwarven_data/-8_-1.json | 32 +- .../notenoughupdates/dwarven_data/-8_-2.json | 26 +- .../notenoughupdates/dwarven_data/-8_-3.json | 35 +- .../notenoughupdates/dwarven_data/-8_-4.json | 31 +- .../notenoughupdates/dwarven_data/-8_-5.json | 22 +- .../notenoughupdates/dwarven_data/-8_-6.json | 6 +- .../assets/notenoughupdates/dwarven_data/-8_0.json | 62 +- .../assets/notenoughupdates/dwarven_data/-8_1.json | 107 +- .../assets/notenoughupdates/dwarven_data/-8_2.json | 111 +- .../assets/notenoughupdates/dwarven_data/-8_3.json | 43 +- .../assets/notenoughupdates/dwarven_data/-8_4.json | 83 +- .../assets/notenoughupdates/dwarven_data/-8_5.json | 42 +- .../assets/notenoughupdates/dwarven_data/-8_6.json | 32 +- .../assets/notenoughupdates/dwarven_data/-8_7.json | 86 +- .../assets/notenoughupdates/dwarven_data/-8_8.json | 266 +- .../assets/notenoughupdates/dwarven_data/-8_9.json | 214 +- .../notenoughupdates/dwarven_data/-9_-1.json | 21 +- .../notenoughupdates/dwarven_data/-9_-2.json | 37 +- .../notenoughupdates/dwarven_data/-9_-3.json | 32 +- .../notenoughupdates/dwarven_data/-9_-4.json | 24 +- .../notenoughupdates/dwarven_data/-9_-5.json | 50 +- .../notenoughupdates/dwarven_data/-9_-6.json | 23 +- .../assets/notenoughupdates/dwarven_data/-9_0.json | 30 +- .../assets/notenoughupdates/dwarven_data/-9_2.json | 24 +- .../assets/notenoughupdates/dwarven_data/-9_3.json | 7 +- .../assets/notenoughupdates/dwarven_data/-9_4.json | 85 +- .../assets/notenoughupdates/dwarven_data/-9_7.json | 293 +- .../assets/notenoughupdates/dwarven_data/-9_8.json | 280 +- .../assets/notenoughupdates/dwarven_data/-9_9.json | 75 +- .../assets/notenoughupdates/dwarven_data/0_0.json | 73 +- .../assets/notenoughupdates/dwarven_data/0_10.json | 60 +- .../assets/notenoughupdates/dwarven_data/0_3.json | 22 +- .../assets/notenoughupdates/dwarven_data/0_7.json | 32 +- .../assets/notenoughupdates/dwarven_data/0_8.json | 46 +- .../assets/notenoughupdates/dwarven_data/0_9.json | 53 +- .../assets/notenoughupdates/dwarven_data/10_1.json | 203 +- .../assets/notenoughupdates/dwarven_data/10_3.json | 216 +- .../assets/notenoughupdates/dwarven_data/10_4.json | 48 +- .../assets/notenoughupdates/dwarven_data/10_5.json | 97 +- .../assets/notenoughupdates/dwarven_data/11_1.json | 73 +- .../assets/notenoughupdates/dwarven_data/11_3.json | 61 +- .../assets/notenoughupdates/dwarven_data/11_4.json | 18 +- .../assets/notenoughupdates/dwarven_data/1_-1.json | 120 +- .../assets/notenoughupdates/dwarven_data/1_-2.json | 37 +- .../assets/notenoughupdates/dwarven_data/1_-3.json | 152 +- .../assets/notenoughupdates/dwarven_data/1_0.json | 90 +- .../assets/notenoughupdates/dwarven_data/1_10.json | 91 +- .../assets/notenoughupdates/dwarven_data/1_7.json | 8 +- .../assets/notenoughupdates/dwarven_data/1_8.json | 45 +- .../assets/notenoughupdates/dwarven_data/1_9.json | 97 +- .../assets/notenoughupdates/dwarven_data/2_-1.json | 19 +- .../assets/notenoughupdates/dwarven_data/2_-2.json | 49 +- .../assets/notenoughupdates/dwarven_data/2_-4.json | 72 +- .../assets/notenoughupdates/dwarven_data/2_-5.json | 61 +- .../assets/notenoughupdates/dwarven_data/2_-7.json | 41 +- .../assets/notenoughupdates/dwarven_data/2_0.json | 88 +- .../assets/notenoughupdates/dwarven_data/2_10.json | 279 +- .../assets/notenoughupdates/dwarven_data/2_3.json | 4 +- .../assets/notenoughupdates/dwarven_data/2_4.json | 146 +- .../assets/notenoughupdates/dwarven_data/2_6.json | 133 +- .../assets/notenoughupdates/dwarven_data/2_7.json | 4 +- .../assets/notenoughupdates/dwarven_data/2_8.json | 104 +- .../assets/notenoughupdates/dwarven_data/2_9.json | 266 +- .../assets/notenoughupdates/dwarven_data/3_-1.json | 28 +- .../notenoughupdates/dwarven_data/3_-10.json | 6 +- .../assets/notenoughupdates/dwarven_data/3_-3.json | 31 +- .../assets/notenoughupdates/dwarven_data/3_-4.json | 20 +- .../assets/notenoughupdates/dwarven_data/3_-5.json | 35 +- .../assets/notenoughupdates/dwarven_data/3_-6.json | 59 +- .../assets/notenoughupdates/dwarven_data/3_0.json | 56 +- .../assets/notenoughupdates/dwarven_data/3_11.json | 48 +- .../assets/notenoughupdates/dwarven_data/3_3.json | 23 +- .../assets/notenoughupdates/dwarven_data/3_4.json | 53 +- .../assets/notenoughupdates/dwarven_data/3_5.json | 20 +- .../assets/notenoughupdates/dwarven_data/3_6.json | 80 +- .../assets/notenoughupdates/dwarven_data/3_7.json | 17 +- .../assets/notenoughupdates/dwarven_data/4_-1.json | 50 +- .../assets/notenoughupdates/dwarven_data/4_-2.json | 9 +- .../assets/notenoughupdates/dwarven_data/4_-8.json | 70 +- .../assets/notenoughupdates/dwarven_data/4_-9.json | 5 +- .../assets/notenoughupdates/dwarven_data/4_0.json | 130 +- .../assets/notenoughupdates/dwarven_data/4_6.json | 62 +- .../assets/notenoughupdates/dwarven_data/5_-5.json | 8 +- .../assets/notenoughupdates/dwarven_data/5_-6.json | 9 +- .../assets/notenoughupdates/dwarven_data/5_-8.json | 103 +- .../assets/notenoughupdates/dwarven_data/5_0.json | 11 +- .../assets/notenoughupdates/dwarven_data/5_10.json | 162 +- .../assets/notenoughupdates/dwarven_data/5_7.json | 228 +- .../assets/notenoughupdates/dwarven_data/5_8.json | 158 +- .../assets/notenoughupdates/dwarven_data/5_9.json | 198 +- .../assets/notenoughupdates/dwarven_data/6_-3.json | 13 +- .../assets/notenoughupdates/dwarven_data/6_0.json | 66 +- .../assets/notenoughupdates/dwarven_data/6_1.json | 234 +- .../assets/notenoughupdates/dwarven_data/6_2.json | 185 +- .../assets/notenoughupdates/dwarven_data/6_3.json | 237 +- .../assets/notenoughupdates/dwarven_data/6_5.json | 304 +- .../assets/notenoughupdates/dwarven_data/6_6.json | 299 +- .../assets/notenoughupdates/dwarven_data/7_-1.json | 5 +- .../assets/notenoughupdates/dwarven_data/7_-2.json | 23 +- .../assets/notenoughupdates/dwarven_data/7_-3.json | 29 +- .../assets/notenoughupdates/dwarven_data/7_0.json | 25 +- .../assets/notenoughupdates/dwarven_data/7_1.json | 116 +- .../assets/notenoughupdates/dwarven_data/7_2.json | 67 +- .../assets/notenoughupdates/dwarven_data/7_3.json | 136 +- .../assets/notenoughupdates/dwarven_data/7_4.json | 123 +- .../assets/notenoughupdates/dwarven_data/7_5.json | 121 +- .../assets/notenoughupdates/dwarven_data/7_6.json | 180 +- .../assets/notenoughupdates/dwarven_data/8_-1.json | 30 +- .../assets/notenoughupdates/dwarven_data/8_-2.json | 51 +- .../assets/notenoughupdates/dwarven_data/8_0.json | 22 +- .../assets/notenoughupdates/dwarven_data/8_1.json | 145 +- .../assets/notenoughupdates/dwarven_data/9_-1.json | 36 +- .../assets/notenoughupdates/dwarven_data/9_1.json | 281 +- .../assets/notenoughupdates/dwarven_data/9_2.json | 218 +- .../assets/notenoughupdates/dwarven_data/9_5.json | 254 +- .../assets/notenoughupdates/dwarven_data/9_6.json | 130 +- .../assets/notenoughupdates/dwarven_data/all.json | 207 +- .../dynamic_54/style1/dynamic_config.json | 4 +- .../dynamic_54/style2/dynamic_config.json | 4 +- .../dynamic_54/style3/dynamic_config.json | 4 +- .../notenoughupdates/invbuttons/extraicons.json | 34 +- .../notenoughupdates/invbuttons/presets.json | 5474 ++--- .../assets/notenoughupdates/official-wiki.css | 22623 ++++++++++++++++++- .../notenoughupdates/shaders/program/blur.json | 100 +- .../shaders/program/dungeonmap.json | 61 +- .../shaders/program/grayscale.json | 42 +- .../shaders/program/setrgbtoalpha.json | 42 +- .../resources/assets/notenoughupdates/sounds.json | 1 - .../sounds/gemstoneamberbreak.json | 4 +- .../sounds/gemstoneamethystbreak.json | 4 +- .../notenoughupdates/sounds/gemstonejadebreak.json | 4 +- .../sounds/gemstonejasperbreak.json | 4 +- .../notenoughupdates/sounds/gemstonerubybreak.json | 4 +- .../sounds/gemstonesapphirebreak.json | 4 +- .../sounds/gemstonetopazbreak.json | 4 +- .../notenoughupdates/sounds/mithrilbreak.json | 4 +- .../notenoughupdates/sounds/titaniumbreak.json | 4 +- src/main/resources/mcmod.info | 30 +- src/main/resources/mixins.notenoughupdates.json | 88 +- .../core/util/Vec3ComparableTest.java | 19 + .../CrystalMetalDetectorSolverTest.java | 123 +- .../CrystalWishingCompassSolverTest.java | 247 +- src/test/resources/log4j2-test.xml | 4 +- 623 files changed, 53710 insertions(+), 4716 deletions(-) create mode 100644 .idea/copyright/NotEnoughUpdates.xml create mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 LICENSE create mode 100644 LICENSE-GPLv3.md create mode 100644 LICENSE.md (limited to 'src/test/java') diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 630d8288..0440aefb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,14 +6,16 @@ on: - '*' paths-ignore: - 'README.md' - - 'LICENSE' + - 'LICENSE.md' + - 'LICENSE-GPLv3.md' - '.gitignore' pull_request: branches: - '*' paths-ignore: - 'README.md' - - 'LICENSE' + - 'LICENSE.md' + - 'LICENSE-GPLv3.md' - '.gitignore' workflow_dispatch: jobs: diff --git a/.github/workflows/send_webhook_update.sh b/.github/workflows/send_webhook_update.sh index 56852159..3ec20af3 100755 --- a/.github/workflows/send_webhook_update.sh +++ b/.github/workflows/send_webhook_update.sh @@ -1,4 +1,23 @@ #!/bin/bash +# +# Copyright (C) 2022 NotEnoughUpdates contributors +# +# This file is part of NotEnoughUpdates. +# +# NotEnoughUpdates is free software: you can redistribute it +# and/or modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# NotEnoughUpdates is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with NotEnoughUpdates. If not, see . +# + set -x COLOR_SUCCESS=8040199 diff --git a/.gitignore b/.gitignore index a7b89d94..53814696 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ out *.iml .idea/* !.idea/codeStyles +!.idea/copyright # gradle build diff --git a/.idea/copyright/NotEnoughUpdates.xml b/.idea/copyright/NotEnoughUpdates.xml new file mode 100644 index 00000000..ea087768 --- /dev/null +++ b/.idea/copyright/NotEnoughUpdates.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..8f73a5c0 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d2d14086..6c163317 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,34 +1,32 @@ ## Before you contribute - - Please check your feature / bug isn't already fixed in one of our pre-releases or on [the development branch](https://github.com/NotEnoughUpdates/NotEnoughUpdates/tree/master/). - - Consider joining our [Discord](https://discord.gg/moulberry) to check in on newest developments by other people, or to get help with problems you encounter. - - Please check that your feature idea complies with the [Hypixel Rules](https://hypixel.net/rules) - - Check that your feature idea isn't already done in other mods. (E.g. Dungeon Solver) - +- Please check your feature / bug isn't already fixed in one of our pre-releases or on [the development branch](https://github.com/NotEnoughUpdates/NotEnoughUpdates/tree/master/). +- Consider joining our [Discord](https://discord.gg/moulberry) to check in on newest developments by other people, or to get help with problems you encounter. +- Please check that your feature idea complies with the [Hypixel Rules](https://hypixel.net/rules) +- Check that your feature idea isn't already done in other mods. (E.g. Dungeon Solver) + ## Setting up a development environment ### Software prerequisites - - Install a Java Development Kit (You will need both version 8 and version 17) [Eclipse Temurin Download](https://adoptium.net/temurin/releases) for convenience, however any JDK will do. - - Install Git. [Windows download](https://git-scm.com/download/win) - - Install an IDE, such as [Jetbrains IntelliJ IDEA](https://www.jetbrains.com/idea/download). +- Install a Java Development Kit (You will need both version 8 and version 17) [Eclipse Temurin Download](https://adoptium.net/temurin/releases) for convenience, however any JDK will do. +- Install Git. [Windows download](https://git-scm.com/download/win) +- Install an IDE, such as [Jetbrains IntelliJ IDEA](https://www.jetbrains.com/idea/download). ### Software configuration - - Clone the NEU repository using `git clone https://github.com/NotEnoughUpdates/NotEnoughUpdates`. - - Import that folder as a Gradle Project in your IDE (IntelliJ should autodetect it as gradle if you select the `NotEnoughUpdates` folder in the Open dialog) - - Set your project SDK to your 1.8 JDK. This can be done in the modules settings (CTRL+ALT+SHIFT+S) in IntelliJ. - - Set your gradle JVM to your 1.17 JDK. This can be done by searching for `gradle jvm` in the CTRL+SHIFT+A dialog in IntelliJ. - - Run the `genRuns` gradle task. In IntelliJ that can be done in the gradle tab on the right side of your IDE. - - Optionally, run the `genSources` gradle task. - - Run the `Minecraft Client` to make sure that everything works. - +- Clone the NEU repository using `git clone https://github.com/NotEnoughUpdates/NotEnoughUpdates`. +- Import that folder as a Gradle Project in your IDE (IntelliJ should autodetect it as gradle if you select the `NotEnoughUpdates` folder in the Open dialog) +- Set your project SDK to your 1.8 JDK. This can be done in the modules settings (CTRL+ALT+SHIFT+S) in IntelliJ. +- Set your gradle JVM to your 1.17 JDK. This can be done by searching for `gradle jvm` in the CTRL+SHIFT+A dialog in IntelliJ. +- Run the `genRuns` gradle task. In IntelliJ that can be done in the gradle tab on the right side of your IDE. +- Optionally, run the `genSources` gradle task. +- Run the `Minecraft Client` to make sure that everything works. ## Logging into Hypixel in a development environment. -Use [DevAuth](https://github.com/DJtheRedstoner/DevAuth). Download the `forge-legacy` version, and put it into the `run/mods` folder. Then follow the configuration instructions in the [DevAuth README](https://github.com/DJtheRedstoner/DevAuth#configuration-file) +Use [DevAuth](https://github.com/DJtheRedstoner/DevAuth). Download the `forge-legacy` version, and put it into the `run/mods` folder. Then follow the configuration instructions in the [DevAuth README](https://github.com/DJtheRedstoner/DevAuth#configuration-file) ## Hot Reloading -Hot Reloading is possible by first launching using the IntelliJ debugger with [DCEVM 1.8](https://dcevm.github.io/). Then running a regular build and confirming the reload prompt. This can cause issues (especially with commands), so restarting is sometimes still necessary. - +Hot Reloading is possible by first launching using the IntelliJ debugger with [DCEVM 1.8](https://dcevm.github.io/). Then running a regular build and confirming the reload prompt. This can cause issues (especially with commands), so restarting is sometimes still necessary. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 7ff2f90d..00000000 --- a/LICENSE +++ /dev/null @@ -1,60 +0,0 @@ -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - to Distribute and Publicly Perform Adaptations. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. - You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. - If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - - For the avoidance of doubt: - Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, - Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). - Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/LICENSE-GPLv3.md b/LICENSE-GPLv3.md new file mode 100644 index 00000000..f5a01711 --- /dev/null +++ b/LICENSE-GPLv3.md @@ -0,0 +1,675 @@ +### GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program--to make sure it remains +free software for all its users. We, the Free Software Foundation, use +the GNU General Public License for most of our software; it applies +also to any other work released this way by its authors. You can apply +it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If the +Program does not specify a version number of the GNU General Public +License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands \`show w' and \`show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an "about box". + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU GPL, see . + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read . diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..6e75f84c --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,157 @@ +### GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + +#### 0. Additional Definitions. + +As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the +GNU General Public License. + +"The Library" refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + +The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +#### 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +#### 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +- a) under this License, provided that you make a good faith effort + to ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or +- b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + +#### 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +- a) Give prominent notice with each copy of the object code that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the object code with a copy of the GNU GPL and this + license document. + +#### 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + +- a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. +- c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. +- d) Do one of the following: + - 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + - 1) Use a suitable shared library mechanism for linking with + the Library. A suitable mechanism is one that (a) uses at run + time a copy of the Library already present on the user's + computer system, and (b) will operate properly with a modified + version of the Library that is interface-compatible with the + Linked Version. +- e) Provide Installation Information, but only if you would + otherwise be required to provide such information under section 6 + of the GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the Application + with a modified version of the Linked Version. (If you use option + 4d0, the Installation Information must accompany the Minimal + Corresponding Source and Corresponding Application Code. If you + use option 4d1, you must provide the Installation Information in + the manner specified by section 6 of the GNU GPL for conveying + Corresponding Source.) + +#### 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +- a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities, conveyed under the terms of this License. +- b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +#### 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +as you received it specifies that a certain numbered version of the +GNU Lesser General Public License "or any later version" applies to +it, you have the option of following the terms and conditions either +of that published version or of any later version published by the +Free Software Foundation. If the Library as you received it does not +specify a version number of the GNU Lesser General Public License, you +may choose any version of the GNU Lesser General Public License ever +published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/README.md b/README.md index f4b2c15d..d5d92b31 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,16 @@ downloads --> - - lines + + lines - - license + + license - - contributors + + contributors diff --git a/Update Notes/2.0-Pre30.md b/Update Notes/2.0-Pre30.md index e036627b..99591f47 100644 --- a/Update Notes/2.0-Pre30.md +++ b/Update Notes/2.0-Pre30.md @@ -11,18 +11,19 @@ - Added Storage to PV (with correct sizes) - Added Personal Vault to PV - Added scroll lock to storage overlay + ### **Fixed Features:** - Todo list - - Fixed fetchur display - - Fixed godpot timer + - Fixed fetchur display + - Fixed godpot timer - PV's wardrobe view not showing second page bottom row (not fully fixed could be better by dividing on every 4 and drawing per column instead of row but right now its always a full page) - Made dwarven overlay work in crystal hollows (nopo) - Added Gemstone powder to dwarven overlay (nopo) - Made smooth aote work with aotv (thanks to 8k for letting me test his aotv) (nopo) ### **Bug Fixes** - + - Arrow Key backpack option under storage gui not doing anything - Fixed pets gui going away if you open /pets (nopo) -- Fixed PV cit models dieing (nopo) \ No newline at end of file +- Fixed PV cit models dieing (nopo) diff --git a/Update Notes/2.0-Pre31-Release.md b/Update Notes/2.0-Pre31-Release.md index dec4e6a1..35306023 100644 --- a/Update Notes/2.0-Pre31-Release.md +++ b/Update Notes/2.0-Pre31-Release.md @@ -1,10 +1,11 @@ # These are the change notes for PRE31-Release ### **Major Changes** -- None yet. Prob not gonna happen this is mainly for small things. +- None yet. Prob not gonna happen this is mainly for small things. ### **Minor Changes:** + - Added a check to see if the storagegui is on before yelling at you for having fastrender on. - Added toggle to disable showing the treecap cooldown in item durability. (Lulonaut)# - Added text to inform the user to "/api new" when the /pv doesn't load. @@ -16,6 +17,7 @@ - Added Tab auto completion to the AH search gui. (Lulonaut) ### **Bug Fixes** + - Fixed a nullpointer exception in dwarven textures (got some confirmation that it fixed it). - Fixed neuec not parsing correctly. - Fixed crashing when you copy text while in the neuec/neu buttons editor menu. @@ -24,24 +26,21 @@ - Fixed golden goblin not having a icon. - Fixed accessory bag overlay's reforge stat detection as hypixel broke it with their tooltip changes. - Fixed NeuEC as hypixel broke it with their tooltip changes. -- Fixed not being able to press repeat keys in chat. +- Fixed not being able to press repeat keys in chat. - Fixed gemstone gauntlet/Divan Drill not being recognised as mining tools. - Fixed morph pets not being recognized by the extended pet info tooltip tweak. - Fixed wrong commission max values for goblin in dwarven mines and the crystal hollows. (CraftyOldMiner) - Fixed player right click menu command block text appearing on an inventory item. (DeDiamondPro) - - ### **Other** + - Enabled help button by default. - Added SecondPfirsisch cape. - Added Stormy_LH cape. - Change cape order in /neucosmetics because ironmoon asked for it. - ### **Notes for texturepack creators** - ### **Previous change log** -https://github.com/DoKM/NotEnoughUpdates/blob/master/Update%20Notes/2.0-Pre31.md +https://github.com/DoKM/NotEnoughUpdates/blob/master/Update%20Notes/2.0-Pre31.md diff --git a/Update Notes/2.0-Pre31.md b/Update Notes/2.0-Pre31.md index 802ad7c4..ac85f45c 100644 --- a/Update Notes/2.0-Pre31.md +++ b/Update Notes/2.0-Pre31.md @@ -13,8 +13,8 @@ - Added mastermode support to /pv (basically done, just needs mastermode xp) - Added support for the Golden Dragon Pet and added support for other weird pets that might get added. - ### **New Features:** + - Added Ferocity, Magic find, Mining speed and mining fortune to Accessory bag (and ferocity and magic find to /pv). - Update notifier for "Pre" version releases. (Ironm00n) - Added toggle for etherwarp helper overlay text. @@ -42,8 +42,8 @@ - Replaced the chat command when clicking on a player name with /pv (Toggleable) - Added a link to a webpage containing neu's feature /neufeatures and it shows on the first time launch. - ### **Bug Fixes** + - Fishing helper not showing "!" when the rod colours are disabled. - Decimal point values not being counted in Accessory bag overlay. - /pv not having the correct max minion tier. (Ironm00n) @@ -67,15 +67,15 @@ - Fixed dwarven mines waypoints not working if dwarven mines overlay was disabled. - Fixed being able to slot lock the 9th slot. - Fixed NEUButtons overlapping with the Accessory Bag overlay by moving the overlapping icons to the right of the overlay. (should work pretty well, too lazy to test with custom button positions but should work fine.) -- Stopped tooltip tweak rawcraftcost displaying if the cost was 0 (either due to the price being really low or api issue). +- Stopped tooltip tweak rawcraftcost displaying if the cost was 0 (either due to the price being really low or api issue). - Added a catch to the capemanger slow to catch duplicate players (https://hst.sh/enuvamecef) (idk how but hey its there now). - Fix being able to hotkey slotlocked items in a chest gui. - (Hopefully) Fix storage overlay nullpointer crash. - Fix not being able to dye undyed leather armour. - Some Storage Overlay fixes (DeDiamondPro) - ### **Other** + - Code clean up by Ironm00n. - Rename variables to be more consistent. (Ironm00n) - Devpane changes. (? - DoKM) (Ironm00n) @@ -106,6 +106,3 @@ - Added the edit button to the Storage gui texture (it was already on transparent but not on the others) please update your textures - Added neu logo to the bottom right of the Storage gui textures (so people stop asking which mod adds the gui (Atleast try to make the amount less)) - Added ironman icon to pv (notenoughupdates/pv_ironman.png) (thanks ery for the icon) - - - diff --git a/Update Notes/2.1.md b/Update Notes/2.1.md index c8f97357..e3c16382 100644 --- a/Update Notes/2.1.md +++ b/Update Notes/2.1.md @@ -1,6 +1,7 @@ # These are the change notes for NEU 2.1 REL ### **Major Changes:** + - Added mining skill overlay - Added fishing skill overlay - Added combat skill overlay @@ -10,14 +11,16 @@ - Added blocking clicks back to the enchanting minigames (because apparently, it's not bannable?) - [Donpireso replied to a sba dev's email about some of sba features, and it seems to imply that blocking clicks in guis aren't bannable](https://cdn.discordapp.com/attachments/823769568933576764/906101631861526559/unknown.png) - Fixed pet overlay not updating when going into /pets -- [Added an armor overlay for the new armor slots](https://cdn.discordapp.com/attachments/832652653292027904/922399046528794634/unknown.png) +- [Added an armor overlay for the new armor slots](https://cdn.discordapp.com/attachments/832652653292027904/922399046528794634/unknown.png) - Added a pet overlay that shows your active pet in your inventory - [Price graph for items on /ah and /bz](https://cdn.discordapp.com/attachments/896407218151366687/926968296929107999/unknown.png) - DeDiamondPro - [Added bingo tab in /pv](https://cdn.discordapp.com/attachments/702456294874808330/951909539383500820/unknown.png) - Lulonaut - Added wishing compass solver that shows target coordinates, structure, and integrates with Skytils waypoints - CraftyOldMiner - Improved metal detector logic to solve using a single position in most cases using known locations based on Keeper coordinates - CraftyOldMiner - Added support for official Hypixel wiki, can be toggled in /neu misc - DeDiamondPro + ### **Minor Changes:** + - Add built-in recipes for forge crafts - nea89 - Add mob drop viewer in the recipe viewer - nea89 - Add Stranded Villager Trades to the item list - nea89 @@ -25,7 +28,7 @@ - Added a config option to hide Dwarven Mines waypoints when already at the location - Lulonaut - Added some info panels to some settings in /neu - Added Kat Level After Upgrade Estimator - nea89 -- Added /pv button in /neu +- Added /pv button in /neu - Added pitch and coins/m as options in farming skill overlay - Make it so tab completion in ah search GUI goes down the items - Lulonaut - Added a toggle for enchant glint in storage gui (ty ery for texture) @@ -41,7 +44,7 @@ - Added /neurepomode to toggle item editing and dev mode, changing the item repo url and toggling autoupdating of the repo - Changed "NEUAH is DISABLED! Enable in /neusettings." to /neu - Changed misc overlays tab to todo overlays -- Added a config option for npc retexturing +- Added a config option for npc retexturing - Added a config option for dirt wand overlay - Added a config option for hoe of tilling - Added an option to use short numbers (1.5mil) for price tooltips @@ -57,7 +60,7 @@ - Added "Has Advanced Tab" to /neustats - Added custom runes and crab hat system - jani - Removed unused textures -- Added total xp if player is above cata 50 in /pv - efefury +- Added total xp if player is above cata 50 in /pv - efefury - Added daily powder to todo overlay - efefury - Added a way to include kismet feather to profit calculator - efefury - Added custom sounds for crystal hollow gemstones - nea89 @@ -81,11 +84,13 @@ - Added tab completion to /neupackdev subcommands. - whalker - Made it if you hold shift in the enchant solvers it overrides prevent missclicks - Added 6-10 stars to the auction search overlay -- Added 6-10 stars to /neucustomize +- Added 6-10 stars to /neucustomize - Added support for attributes in neuec - Added Heavy Pearls to todo overlay - cobble8 - Added Booster Cookie Warning - 2stinkysocks + ### **Bug Fixes:** + - Fix wiki pages freezing the entire game - nea89 - Made titanium overlay and waypoints work with dwarven overlay off - "fixed" divan rarity in NEUAH (scuffed) @@ -99,13 +104,13 @@ - Fixed api key autofill with dg copy chat feature - Made missing enchants not show on an item if its not missing any enchants - Fixed Mining overlay crash - Dokm -- Fixed pet crash - Dokm +- Fixed pet crash - Dokm - Fixed fetchur for the 75th time - [Made an error if you have new tab list off](https://cdn.discordapp.com/attachments/896407218151366687/913681097605398528/unknown.png) - Fixed lava fishing with the fishing alert - Fixed /locraw detection, [previously allowed chat messages to trigger it](https://github.com/NotEnoughUpdates/NotEnoughUpdates/issues/35) - IRONM00N - Fixed experiment timer in todo overlay - efefury -- Fixed replace click events with /pv working in other modes +- Fixed replace click events with /pv working in other modes - Fixed /neuec presets not applying the strikethrough attribute - Lulonaut - Fixed what hypxiel broke in dungeons - Fixed the dungeon map on f1 - Minikloon @@ -114,7 +119,9 @@ - Fixed crash in /pv when the player had a pet that is not saved in the repo - Lulonaut - Fixed some vanilla Minecraft keybinds not working in NEU GUIs - Fixed crash with spamming remove enchant in /neuec + ### **Other:** + - New icons was added in storage_icons.png - Moved the help icon in /neucustomize over a little - Added dg partner cape @@ -123,5 +130,7 @@ - Code Cleanup - IRONM00N - Renamed Keebler408 to CraftyOldMiner - Added JUnit unit tests for metal detector and wishing compass solver + ### **Previous change log** + https://github.com/NotEnoughUpdates/NotEnoughUpdates/blob/master/Update%20Notes/2.0-Pre31-Release.md diff --git a/build.gradle.kts b/build.gradle.kts index 4f178f58..9f3c1715 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,26 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + import java.io.ByteArrayOutputStream plugins { - idea + idea java id("gg.essential.loom") version "0.10.0.+" id("dev.architectury.architectury-pack200") version "0.1.3" diff --git a/settings.gradle.kts b/settings.gradle.kts index 4df48664..eb291fb5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,24 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + pluginManagement { - repositories { + repositories { mavenCentral() gradlePluginPortal() maven("https://oss.sonatype.org/content/repositories/snapshots") diff --git a/src/main/java/NotSkyblockAddonsInstallerFrame.java b/src/main/java/NotSkyblockAddonsInstallerFrame.java index e6543617..969e6c28 100644 --- a/src/main/java/NotSkyblockAddonsInstallerFrame.java +++ b/src/main/java/NotSkyblockAddonsInstallerFrame.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; @@ -6,7 +25,13 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.StringWriter; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java b/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java index 28686073..06321b53 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java index 38b59ef3..e1a3b3ee 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.gson.Gson; @@ -100,7 +119,6 @@ public class ItemPriceInformation { } } - NumberFormat format = NumberFormat.getInstance(Locale.US); boolean shortNumber = NotEnoughUpdates.INSTANCE.config.tooltipTweaks.shortNumberFormatPrices; if (bazaarItem) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUApi.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUApi.java index feb18c66..6cdeb474 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUApi.java @@ -1,5 +1,23 @@ -package io.github.moulberry.notenoughupdates; +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ +package io.github.moulberry.notenoughupdates; import net.minecraftforge.fml.relauncher.ReflectionHelper; public class NEUApi { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index ea92a670..c4efeb15 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index b8651867..5b1d3c14 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEURepoResourcePack.java b/src/main/java/io/github/moulberry/notenoughupdates/NEURepoResourcePack.java index 2a5cda92..bc279188 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEURepoResourcePack.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEURepoResourcePack.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.gson.JsonObject; @@ -7,69 +26,74 @@ import net.minecraft.client.resources.data.IMetadataSerializer; import net.minecraft.util.ResourceLocation; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.HashSet; import java.util.Set; public class NEURepoResourcePack implements IResourcePack { - File repoLocation; - Set resourceDomains = new HashSet<>(); + File repoLocation; + Set resourceDomains = new HashSet<>(); - public NEURepoResourcePack(File repoLocation, String domain) { - this.repoLocation = repoLocation; - resourceDomains.add(domain); - } + public NEURepoResourcePack(File repoLocation, String domain) { + this.repoLocation = repoLocation; + resourceDomains.add(domain); + } - public boolean loadRepoLocation() { - if (repoLocation != null) return true; - NotEnoughUpdates instance = NotEnoughUpdates.INSTANCE; - if (instance == null) return false; - NEUManager manager = instance.manager; - if (manager == null) return false; - repoLocation = manager.repoLocation; - return repoLocation != null; - } + public boolean loadRepoLocation() { + if (repoLocation != null) return true; + NotEnoughUpdates instance = NotEnoughUpdates.INSTANCE; + if (instance == null) return false; + NEUManager manager = instance.manager; + if (manager == null) return false; + repoLocation = manager.repoLocation; + return repoLocation != null; + } - public File getFileForResource(ResourceLocation loc) { - if (repoLocation == null) { - if (!loadRepoLocation()) - return null; - } - if (!"neurepo".equals(loc.getResourceDomain())) { - return null; - } - return new File(repoLocation, loc.getResourcePath()); - } + public File getFileForResource(ResourceLocation loc) { + if (repoLocation == null) { + if (!loadRepoLocation()) + return null; + } + if (!"neurepo".equals(loc.getResourceDomain())) { + return null; + } + return new File(repoLocation, loc.getResourcePath()); + } - @Override - public InputStream getInputStream(ResourceLocation resourceLocation) throws IOException { - return new BufferedInputStream(new FileInputStream(getFileForResource(resourceLocation))); - } + @Override + public InputStream getInputStream(ResourceLocation resourceLocation) throws IOException { + return new BufferedInputStream(new FileInputStream(getFileForResource(resourceLocation))); + } - @Override - public boolean resourceExists(ResourceLocation resourceLocation) { - File file = getFileForResource(resourceLocation); - return file != null && file.exists(); - } + @Override + public boolean resourceExists(ResourceLocation resourceLocation) { + File file = getFileForResource(resourceLocation); + return file != null && file.exists(); + } - @Override - public Set getResourceDomains() { - return resourceDomains; - } + @Override + public Set getResourceDomains() { + return resourceDomains; + } - @Override - public T getPackMetadata(IMetadataSerializer iMetadataSerializer, String s) throws IOException { - return iMetadataSerializer.parseMetadataSection(s, new JsonObject()); - } + @Override + public T getPackMetadata(IMetadataSerializer iMetadataSerializer, String s) + throws IOException { + return iMetadataSerializer.parseMetadataSection(s, new JsonObject()); + } - @Override - public BufferedImage getPackImage() throws IOException { - return null; - } + @Override + public BufferedImage getPackImage() throws IOException { + return null; + } - @Override - public String getPackName() { - return "NEU Repo Resources"; - } + @Override + public String getPackName() { + return "NEU Repo Resources"; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index cac89e77..9f7a98b1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates; import com.google.common.collect.Sets; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java index 80d2bca9..d4b6bd05 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.auction; import com.google.gson.JsonArray; @@ -27,7 +46,16 @@ import net.minecraft.util.ResourceLocation; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.util.*; +import java.util.Base64; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.TreeMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; @@ -214,7 +242,7 @@ public class APIManager { lastBazaarUpdate = currentTime - BAZAAR_UPDATE_INTERVAL + 60 * 1000; // Try again in 1 minute on failure updateBazaar(); } - if (currentTime - lastLowestBinUpdate > LOWEST_BIN_UPDATE_INTERVAL) { + if (currentTime - lastLowestBinUpdate > LOWEST_BIN_UPDATE_INTERVAL) { lastLowestBinUpdate = currentTime - LOWEST_BIN_UPDATE_INTERVAL + 30 * 1000; // Try again in 30 seconds on failure updateLowestBin(); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java index 4fae9ea5..b5d34ed7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.auction; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAHGui.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAHGui.java index 9311040d..ca85ca1c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAHGui.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAHGui.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.auction; import net.minecraft.client.gui.GuiScreen; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/ClientCommandBase.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/ClientCommandBase.java index 8ba87ecd..e0ae7a1a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/ClientCommandBase.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/ClientCommandBase.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands; import net.minecraft.command.CommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java index ea401eb7..86411f4f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java @@ -1,11 +1,41 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands; -import io.github.moulberry.notenoughupdates.commands.dev.*; +import io.github.moulberry.notenoughupdates.commands.dev.DevTestCommand; +import io.github.moulberry.notenoughupdates.commands.dev.DiagCommand; +import io.github.moulberry.notenoughupdates.commands.dev.DungeonWinTestCommand; +import io.github.moulberry.notenoughupdates.commands.dev.NullzeeSphereCommand; +import io.github.moulberry.notenoughupdates.commands.dev.PackDevCommand; +import io.github.moulberry.notenoughupdates.commands.dev.ReloadRepoCommand; +import io.github.moulberry.notenoughupdates.commands.dev.ResetRepoCommand; +import io.github.moulberry.notenoughupdates.commands.dev.StatsCommand; import io.github.moulberry.notenoughupdates.commands.dungeon.DhCommand; import io.github.moulberry.notenoughupdates.commands.dungeon.DnCommand; import io.github.moulberry.notenoughupdates.commands.dungeon.JoinDungeonCommand; import io.github.moulberry.notenoughupdates.commands.dungeon.MapCommand; -import io.github.moulberry.notenoughupdates.commands.help.*; +import io.github.moulberry.notenoughupdates.commands.help.FeaturesCommand; +import io.github.moulberry.notenoughupdates.commands.help.HelpCommand; +import io.github.moulberry.notenoughupdates.commands.help.LinksCommand; +import io.github.moulberry.notenoughupdates.commands.help.SettingsCommand; +import io.github.moulberry.notenoughupdates.commands.help.StorageViewerWhyCommand; import io.github.moulberry.notenoughupdates.commands.misc.AhCommand; import io.github.moulberry.notenoughupdates.commands.misc.CalendarCommand; import io.github.moulberry.notenoughupdates.commands.misc.CosmeticsCommand; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/EntityViewerCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/EntityViewerCommand.java index c7b1862e..e3738661 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/EntityViewerCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/EntityViewerCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands; import com.google.common.collect.Lists; @@ -21,61 +40,61 @@ import java.util.Queue; import java.util.concurrent.ConcurrentLinkedDeque; public class EntityViewerCommand extends ClientCommandBase { - public EntityViewerCommand() { - super("neushowentity"); - MinecraftForge.EVENT_BUS.register(this); - } + public EntityViewerCommand() { + super("neushowentity"); + MinecraftForge.EVENT_BUS.register(this); + } - @Override - public List getCommandAliases() { - return Lists.newArrayList("neuentityviewer"); - } + @Override + public List getCommandAliases() { + return Lists.newArrayList("neuentityviewer"); + } - @Override - public String getCommandUsage(ICommandSender sender) { - return EnumChatFormatting.RED + "Use /neushowentity list"; - } + @Override + public String getCommandUsage(ICommandSender sender) { + return EnumChatFormatting.RED + "Use /neushowentity list"; + } - public void showUsage(ICommandSender sender) { - sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); - } + public void showUsage(ICommandSender sender) { + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + } - private final Queue queuedGUIS = new ConcurrentLinkedDeque<>(); + private final Queue queuedGUIS = new ConcurrentLinkedDeque<>(); - @SubscribeEvent - public void onTick(TickEvent event) { - if (Minecraft.getMinecraft().currentScreen == null) { - EntityViewer poll = queuedGUIS.poll(); - if (poll == null) return; - Minecraft.getMinecraft().displayGuiScreen(poll); - } - } + @SubscribeEvent + public void onTick(TickEvent event) { + if (Minecraft.getMinecraft().currentScreen == null) { + EntityViewer poll = queuedGUIS.poll(); + if (poll == null) return; + Minecraft.getMinecraft().displayGuiScreen(poll); + } + } - @Override - public void processCommand(ICommandSender sender, String[] strings) throws CommandException { - if (strings.length == 0) { - showUsage(sender); - return; - } - if (strings[0].equals("list")) { - for (String label : EntityViewer.validEntities.keySet()) { - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.BLUE + " " + label) - .setChatStyle(new ChatStyle().setChatClickEvent( - new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/neuentityviewer " + label)))); - } - return; - } - EntityLivingBase entityLivingBase; - if (strings[0].startsWith("@")) { - ResourceLocation resourceLocation = new ResourceLocation(strings[0].substring(1)); - entityLivingBase = EntityViewer.constructEntity(resourceLocation); - } else { - entityLivingBase = EntityViewer.constructEntity(strings[0], Arrays.copyOfRange(strings, 1, strings.length)); - } - if (entityLivingBase == null) { - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not create that entity")); - return; - } - queuedGUIS.add(new EntityViewer(strings[0], entityLivingBase)); - } + @Override + public void processCommand(ICommandSender sender, String[] strings) throws CommandException { + if (strings.length == 0) { + showUsage(sender); + return; + } + if (strings[0].equals("list")) { + for (String label : EntityViewer.validEntities.keySet()) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.BLUE + " " + label) + .setChatStyle(new ChatStyle().setChatClickEvent( + new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/neuentityviewer " + label)))); + } + return; + } + EntityLivingBase entityLivingBase; + if (strings[0].startsWith("@")) { + ResourceLocation resourceLocation = new ResourceLocation(strings[0].substring(1)); + entityLivingBase = EntityViewer.constructEntity(resourceLocation); + } else { + entityLivingBase = EntityViewer.constructEntity(strings[0], Arrays.copyOfRange(strings, 1, strings.length)); + } + if (entityLivingBase == null) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not create that entity")); + return; + } + queuedGUIS.add(new EntityViewer(strings[0], entityLivingBase)); + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/ScreenCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/ScreenCommand.java index 29dd9d55..1b90e5df 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/ScreenCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/ScreenCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DevTestCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DevTestCommand.java index 478f4db7..7cca9d3b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DevTestCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DevTestCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java index dab99698..326c00b4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DiagCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -49,8 +68,7 @@ public class DiagCommand extends ClientCommandBase { CrystalMetalDetectorSolver.setDebugDoNotUseCenter(true); sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Center coordinates-based solutions disabled")); - } - else if (subCommand.equals("center=on")) { + } else if (subCommand.equals("center=on")) { CrystalMetalDetectorSolver.setDebugDoNotUseCenter(false); sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Center coordinates-based solutions enabled")); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DungeonWinTestCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DungeonWinTestCommand.java index 223e154a..be25e697 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DungeonWinTestCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/DungeonWinTestCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/NullzeeSphereCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/NullzeeSphereCommand.java index 64d64545..3a9ce90f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/NullzeeSphereCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/NullzeeSphereCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/PackDevCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/PackDevCommand.java index 2b0e7240..e1504472 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/PackDevCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/PackDevCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -25,51 +44,66 @@ import java.util.function.Supplier; public class PackDevCommand extends ClientCommandBase { static Minecraft mc = Minecraft.getMinecraft(); + public PackDevCommand() { super("neupackdev"); } private static final HashMap> commands = new HashMap>() {{ - put("getnpc", + put( + "getnpc", new Command<>( "NPC", () -> mc.theWorld.playerEntities, true, AbstractClientPlayer.class - )); - put("getnpcs", + ) + ); + put( + "getnpcs", new Command<>( "NPC", () -> mc.theWorld.playerEntities, false, AbstractClientPlayer.class - )); - put("getmob", + ) + ); + put( + "getmob", new Command<>( "mob", () -> mc.theWorld.loadedEntityList, true, EntityLiving.class - )); - put("getmobs", + ) + ); + put( + "getmobs", new Command<>( "mob", () -> mc.theWorld.loadedEntityList, false, EntityLiving.class - )); - put("getarmorstand", - new Command<>("armor stand", + ) + ); + put( + "getarmorstand", + new Command<>( + "armor stand", () -> mc.theWorld.loadedEntityList, true, EntityArmorStand.class - )); - put("getarmorstands", - new Command<>("armor stand", + ) + ); + put( + "getarmorstands", + new Command<>( + "armor stand", () -> mc.theWorld.loadedEntityList, false, EntityArmorStand.class - )); + ) + ); }}; @Override @@ -108,7 +142,7 @@ public class PackDevCommand extends ClientCommandBase { StringBuilder output; String subCommand = args[0].toLowerCase(); if (commands.containsKey(subCommand)) { - Command command = commands.get(subCommand); + Command command = commands.get(subCommand); output = command.getData(dist); } else if (subCommand.equals("getall")) { output = getAll(dist); @@ -184,7 +218,7 @@ public class PackDevCommand extends ClientCommandBase { String heldItemString = heldItemTagCompound.toString(); NBTBase extraAttrTag = heldItemTagCompound.getTag("ExtraAttributes"); entityData - .append(heldItemString != null ? heldItemString : "null") + .append(heldItemString != null ? heldItemString : "null") .append("\nItem Tag Compound Extra Attributes: ") .append(extraAttrTag != null ? extraAttrTag : "null"); } else { @@ -201,12 +235,13 @@ public class PackDevCommand extends ClientCommandBase { } private static final String[] armorPieceTypes = {"Boots", "Leggings", "Chestplate", "Helmet"}; - public static StringBuilder armorDataBuilder (T entity) { + + public static StringBuilder armorDataBuilder(T entity) { StringBuilder armorData = new StringBuilder(); - for (int i=0; i < 4; i++) { + for (int i = 0; i < 4; i++) { ItemStack currentArmor = entity.getCurrentArmor(0); armorData.append(String.format("\n%s: ", armorPieceTypes[i])); - if (currentArmor == null) { + if (currentArmor == null) { armorData.append("null"); } else { armorData.append(currentArmor.getTagCompound() != null ? currentArmor.getTagCompound().toString() : "null"); @@ -221,10 +256,12 @@ public class PackDevCommand extends ClientCommandBase { Class clazz; boolean single; - Command(String typeFriendlyName, - Supplier> entitySupplier, - boolean single, - Class clazz) { + Command( + String typeFriendlyName, + Supplier> entitySupplier, + boolean single, + Class clazz + ) { this.typeFriendlyName = typeFriendlyName; this.entitySupplier = entitySupplier; this.single = single; @@ -241,8 +278,8 @@ public class PackDevCommand extends ClientCommandBase { continue; } T entityT = (T) entity; - double entityDistanceSq = entity.getDistanceSq(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ); - if (entityDistanceSq < distSq) { + double entityDistanceSq = entity.getDistanceSq(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ); + if (entityDistanceSq < distSq) { if (single) { distSq = entityDistanceSq; closest = entityT; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java index 40db245a..0bf57594 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java index 9e8363fb..3f693898 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java index c7b6e887..756afc88 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DhCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DhCommand.java index 89299a36..222862f9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DhCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DhCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dungeon; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DnCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DnCommand.java index 8fbbceba..a5a7bcca 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DnCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/DnCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dungeon; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/JoinDungeonCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/JoinDungeonCommand.java index 874e81db..d69f86f3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/JoinDungeonCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/JoinDungeonCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dungeon; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/MapCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/MapCommand.java index ae06a346..3789a09d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/MapCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dungeon/MapCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.dungeon; import com.google.gson.JsonElement; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/FeaturesCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/FeaturesCommand.java index 593f2575..5f709c4f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/FeaturesCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/FeaturesCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.help; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java index c9f0ec27..ba49221e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java @@ -1,15 +1,32 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.help; import com.google.common.collect.Lists; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; import java.util.ArrayList; -import java.util.List; public class HelpCommand extends ClientCommandBase { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/LinksCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/LinksCommand.java index c81f44a8..cb8ba6ed 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/LinksCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/LinksCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.help; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/SettingsCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/SettingsCommand.java index 08350be9..9964b739 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/SettingsCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/SettingsCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.help; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/StorageViewerWhyCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/StorageViewerWhyCommand.java index 5d19d62c..820c6f2a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/StorageViewerWhyCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/StorageViewerWhyCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.help; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java index 69d114ca..1cd6bcce 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.misc; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/ButtonsCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/ButtonsCommand.java index 63d5c327..55113462 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/ButtonsCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/ButtonsCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.misc; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalendarCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalendarCommand.java index d3c472bd..58c13474 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalendarCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalendarCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.misc; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CosmeticsCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CosmeticsCommand.java index de772d65..f74b5813 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CosmeticsCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CosmeticsCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.misc; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CustomizeCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CustomizeCommand.java index 6bce4f5a..cca6535e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CustomizeCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CustomizeCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.misc; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -9,7 +28,6 @@ import net.minecraft.command.ICommandSender; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; -import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/CataCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/CataCommand.java index ccf72d73..afc47418 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/CataCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/CataCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.profile; import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PeekCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PeekCommand.java index d69139aa..3133edf5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PeekCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PeekCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.profile; import com.google.gson.JsonElement; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PvCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PvCommand.java index 07394ffd..2d5c05f4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PvCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/PvCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.profile; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java index fe441ad6..e4ca497c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.commands.profile; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java b/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java index c85841b3..fc2be97b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/ChromaColour.java b/src/main/java/io/github/moulberry/notenoughupdates/core/ChromaColour.java index 8f4dd87d..05a9a65e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/ChromaColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/ChromaColour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import java.awt.*; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GlScissorStack.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GlScissorStack.java index 7cc8893f..40b9fe7a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GlScissorStack.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GlScissorStack.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElement.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElement.java index c1c76675..2a684164 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElement.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElement.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import net.minecraft.client.gui.Gui; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementBoolean.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementBoolean.java index d5cbb3ad..b0586210 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementBoolean.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementBoolean.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import io.github.moulberry.notenoughupdates.core.util.lerp.LerpUtils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementColour.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementColour.java index 48996c8d..1f655aaf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementColour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementTextField.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementTextField.java index f3d038e9..45dc58cc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementTextField.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiElementTextField.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import io.github.moulberry.notenoughupdates.core.util.StringUtils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiScreenElementWrapper.java b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiScreenElementWrapper.java index c7c4517b..95ed8a5f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/GuiScreenElementWrapper.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/GuiScreenElementWrapper.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core; import net.minecraft.client.gui.GuiScreen; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Config.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Config.java index 2a696a44..6bafb1fd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Config.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Config.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config; public class Config { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/GuiPositionEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/GuiPositionEditor.java index 9d0133cb..eac1e5cd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/GuiPositionEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/GuiPositionEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/KeybindHelper.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/KeybindHelper.java index 30226a22..d63f871c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/KeybindHelper.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/KeybindHelper.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config; import org.lwjgl.input.Keyboard; 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 cf946649..535c92bf 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 @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/PositionNew.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/PositionNew.java index 8f2b02d8..cf756c91 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/PositionNew.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/PositionNew.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/Category.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/Category.java index b67d0383..e0a9585a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/Category.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/Category.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java index 1c847851..b11f7651 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java index 11b798f9..7491a94f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorBoolean.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorBoolean.java index f625b318..8e6f652c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorBoolean.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorBoolean.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorButton.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorButton.java index 455df65f..a2c56dc0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorButton.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorButton.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorColour.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorColour.java index 6640ade9..824b2eec 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorColour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java index 61e923f5..d9707c9b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDraggableList.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; @@ -9,5 +28,6 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) public @interface ConfigEditorDraggableList { String[] exampleText(); + boolean allowDeleting() default true; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDropdown.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDropdown.java index ac766e93..8d870643 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDropdown.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorDropdown.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorFSR.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorFSR.java index 217df0c5..ba45ae68 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorFSR.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorFSR.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorKeybind.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorKeybind.java index 8d8de2eb..f1a3e329 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorKeybind.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorKeybind.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorSlider.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorSlider.java index abab37f9..b8db25bc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorSlider.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorSlider.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorText.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorText.java index 1ff7e39e..b6b32fb2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorText.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorText.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigOption.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigOption.java index 2ee23dcf..d51294e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigOption.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigOption.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.annotations; import java.lang.annotation.ElementType; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java index d62c7ec7..c3969e35 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java index 8877cd03..dc1173ef 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorBoolean.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorBoolean.java index 8a3b2f14..d12ec8e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorBoolean.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorBoolean.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.GuiElementBoolean; @@ -18,7 +37,7 @@ public class GuiOptionEditorBoolean extends GuiOptionEditor { super(option); this.config = config; this.runnableId = runnableId; - bool = new GuiElementBoolean(0, 0, (boolean) option.get(),10, (value) -> onUpdate(option, value)); + bool = new GuiElementBoolean(0, 0, (boolean) option.get(), 10, (value) -> onUpdate(option, value)); } @Override diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorButton.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorButton.java index 76944efa..aef6318c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorButton.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorButton.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.Config; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorColour.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorColour.java index 80d2af42..ca4087b5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorColour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.ChromaColour; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java index 4dbde24b..63a932b5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDropdown.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDropdown.java index a17737e3..af6af277 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDropdown.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDropdown.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorFSR.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorFSR.java index b443b5f6..048e261e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorFSR.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorFSR.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.Config; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorKeybind.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorKeybind.java index 5ff961a7..6eb71d1e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorKeybind.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorKeybind.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.KeybindHelper; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorSlider.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorSlider.java index 45ae70d9..7fceb92d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorSlider.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorSlider.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.GuiElementTextField; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorText.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorText.java index 7acc074b..ad2fa4db 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorText.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorText.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.GuiElementTextField; 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 80ec3811..ed45bab6 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 @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.Position; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java index dddc14de..75862069 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java @@ -1,9 +1,50 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.config.struct; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Config; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; -import io.github.moulberry.notenoughupdates.core.config.gui.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.Category; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorText; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditor; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorButton; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorColour; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorText; import java.lang.reflect.Field; import java.util.LinkedHashMap; @@ -148,7 +189,11 @@ public class ConfigProcessor { if (optionField.isAnnotationPresent(ConfigEditorDraggableList.class)) { ConfigEditorDraggableList configEditorAnnotation = optionField.getAnnotation(ConfigEditorDraggableList.class); - editor = new GuiOptionEditorDraggableList(option, configEditorAnnotation.exampleText(), configEditorAnnotation.allowDeleting()); + editor = new GuiOptionEditorDraggableList( + option, + configEditorAnnotation.exampleText(), + configEditorAnnotation.allowDeleting() + ); } } if (optionType.isAssignableFrom(String.class)) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/GuiElementSlider.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/GuiElementSlider.java index c2252a97..3e982f9d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/GuiElementSlider.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/GuiElementSlider.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import io.github.moulberry.notenoughupdates.core.GuiElement; @@ -10,7 +29,13 @@ import org.lwjgl.opengl.GL11; import java.util.function.Consumer; -import static io.github.moulberry.notenoughupdates.util.GuiTextures.*; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_button_new; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_off_cap; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_off_notch; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_off_segment; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_on_cap; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_on_notch; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_on_segment; public class GuiElementSlider extends GuiElement { public int x; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Line.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Line.java index fb134e85..a5744a26 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Line.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Line.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import net.minecraft.util.Vec3; @@ -16,9 +35,11 @@ public class Line { } public Vec3 getMidpoint() { - return new Vec3((point1.xCoord + point2.xCoord) / 2.0, + return new Vec3( + (point1.xCoord + point2.xCoord) / 2.0, (point1.yCoord + point2.yCoord) / 2.0, - (point1.zCoord + point2.zCoord) / 2.0); + (point1.zCoord + point2.zCoord) / 2.0 + ); } /** @@ -27,8 +48,7 @@ public class Line { * * @return The intersection {@link Line} or {@code null} if no solution found */ - public Line getIntersectionLineSegment(Line other) - { + public Line getIntersectionLineSegment(Line other) { Vec3 p1 = this.point1; Vec3 p2 = this.point2; Vec3 p3 = other.point1; @@ -61,14 +81,17 @@ public class Line { double mub = (d1343 + d4321 * (mua)) / d4343; Line resultSegment = new Line( - new Vec3 ( - (float)(p1.xCoord + mua * p21.xCoord), - (float)(p1.yCoord + mua * p21.yCoord), - (float)(p1.zCoord + mua * p21.zCoord)), - new Vec3 ( - (float)(p3.xCoord + mub * p43.xCoord), - (float)(p3.yCoord + mub * p43.yCoord), - (float)(p3.zCoord + mub * p43.zCoord))); + new Vec3( + (float) (p1.xCoord + mua * p21.xCoord), + (float) (p1.yCoord + mua * p21.yCoord), + (float) (p1.zCoord + mua * p21.zCoord) + ), + new Vec3( + (float) (p3.xCoord + mub * p43.xCoord), + (float) (p3.yCoord + mub * p43.yCoord), + (float) (p3.zCoord + mub * p43.zCoord) + ) + ); return resultSegment; } @@ -82,9 +105,11 @@ public class Line { } public String toString() { - return String.format("point1 = %s, point2 = %s, midpoint = %s", + return String.format( + "point1 = %s, point2 = %s, midpoint = %s", point1 == null ? "NULL" : point1.toString(), point2 == null ? "NULL" : point2.toString(), - (point1 == null || point2 == null) ? "NULL" : getMidpoint()); + (point1 == null || point2 == null) ? "NULL" : getMidpoint() + ); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/MiscUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/MiscUtils.java index 03a9483b..41780140 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/MiscUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/MiscUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Splitters.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Splitters.java index 0bb858db..389991b4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Splitters.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Splitters.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import com.google.common.base.Splitter; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java index b0deadd2..41f2742f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import com.google.common.collect.Sets; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java index cd144c21..c9736b77 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/Vec3Comparable.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import net.minecraft.util.BlockPos; @@ -54,7 +73,7 @@ public class Vec3Comparable extends Vec3 implements Comparable { } @Override - public Vec3Comparable add(Vec3 other) { + public Vec3Comparable add(Vec3 other) { return new Vec3Comparable(super.add(other)); } @@ -89,19 +108,19 @@ public class Vec3Comparable extends Vec3 implements Comparable { } @Override - public boolean equals(Object other) { - if (this == other) { + public boolean equals(Object other) { + if (this == other) { return true; - } else if (!(other instanceof Vec3Comparable)) { + } else if (!(other instanceof Vec3Comparable)) { return false; - } else { + } else { Vec3Comparable vec3c = (Vec3Comparable) other; return this.xCoord == vec3c.xCoord && this.yCoord == vec3c.yCoord && this.zCoord == vec3c.zCoord; } } @Override - public int hashCode() { + public int hashCode() { long bits = 1L; bits = 31L * bits + doubleToLongBits(xCoord); bits = 31L * bits + doubleToLongBits(yCoord); @@ -112,9 +131,9 @@ public class Vec3Comparable extends Vec3 implements Comparable { public int compareTo(Vec3Comparable other) { return this.yCoord == other.yCoord ? (this.zCoord == other.zCoord ? - (int)(this.xCoord - other.xCoord) - : (int)(this.zCoord - other.zCoord)) - : (int)(this.yCoord - other.yCoord); + (int) (this.xCoord - other.xCoord) + : (int) (this.zCoord - other.zCoord)) + : (int) (this.yCoord - other.yCoord); } public boolean signumEquals(Vec3 other) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpUtils.java index 7e401959..0e60ad92 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util.lerp; public class LerpUtils { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingFloat.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingFloat.java index 3d9e7787..fb03140c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingFloat.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingFloat.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util.lerp; public class LerpingFloat { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java index 024455fd..8462200f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util.lerp; public class LerpingInteger { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java index 96e9729f..e7ce29c3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util.render; import io.github.moulberry.notenoughupdates.core.BackgroundBlur; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/TextRenderUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/TextRenderUtils.java index ff7ac53a..cee38cea 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/TextRenderUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/TextRenderUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util.render; import io.github.moulberry.notenoughupdates.core.util.StringUtils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java index 18e62706..293535e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.cosmetics; import com.google.common.collect.BiMap; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeNode.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeNode.java index c32cc98f..9bf0313b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeNode.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeNode.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.cosmetics; import net.minecraft.client.renderer.Tessellator; @@ -391,4 +410,4 @@ public class CapeNode { .normal(otherSideNorm.x, otherSideNorm.y, otherSideNorm.z).endVertex(); tessellator.draw(); } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java index 1b33decf..0e37bed3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.cosmetics; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java index a58587a8..d32abf64 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.cosmetics; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/ShaderManager.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/ShaderManager.java index 02e8215c..45db303b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/ShaderManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/ShaderManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.cosmetics; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java index 0e7c59c7..7a2eb2b0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.dungeons; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; 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 e132d287..2693341a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.dungeons; import com.google.common.collect.Iterables; @@ -46,8 +65,13 @@ import java.awt.*; import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.*; +import java.util.Map; +import java.util.Objects; +import java.util.Set; public class DungeonMap { private static final ResourceLocation GREEN_CHECK = new ResourceLocation( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonWin.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonWin.java index 66389beb..a56a5679 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonWin.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonWin.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.dungeons; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -14,7 +33,12 @@ import net.minecraftforge.client.event.ClientChatReceivedEvent; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; -import java.util.*; +import java.util.ArrayList; +import java.util.ConcurrentModificationException; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -200,11 +224,16 @@ public class DungeonWin { displayWin(); } else { if (unformatted.trim().length() > 0) { - if (unformatted.contains("The Catacombs") || unformatted.contains("Master Mode Catacombs") || unformatted.contains("Team Score") || unformatted.contains("Defeated") || unformatted.contains("Total Damage") - || unformatted.contains("Ally Healing") || unformatted.contains("Enemies Killed") || unformatted.contains("Deaths") || unformatted.contains("Secrets Found")) { + if (unformatted.contains("The Catacombs") || unformatted.contains("Master Mode Catacombs") || + unformatted.contains("Team Score") || unformatted.contains("Defeated") || unformatted.contains( + "Total Damage") + || unformatted.contains("Ally Healing") || unformatted.contains("Enemies Killed") || unformatted.contains( + "Deaths") || unformatted.contains("Secrets Found")) { text.add(e.message.getFormattedText().substring(6).trim()); } else { - System.out.println("These messages would of showed on neu dungeon overlay but didnt, They are either bugged or i missed them: \"" + e.message.getFormattedText().substring(6).trim() + "\""); + System.out.println( + "These messages would of showed on neu dungeon overlay but didnt, They are either bugged or i missed them: \"" + + e.message.getFormattedText().substring(6).trim() + "\""); } } } 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 e59e0ea1..47e85023 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.dungeons; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -29,10 +48,16 @@ import org.lwjgl.opengl.GL11; import java.awt.*; import java.io.IOException; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.*; +import java.util.Map; -import static io.github.moulberry.notenoughupdates.util.GuiTextures.*; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.button_tex; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_button; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_off_large; +import static io.github.moulberry.notenoughupdates.util.GuiTextures.slider_on_large; public class GuiDungeonMapEditor extends GuiScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/events/NEUEvent.java b/src/main/java/io/github/moulberry/notenoughupdates/events/NEUEvent.java index a2c82070..178431d0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/events/NEUEvent.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/events/NEUEvent.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.events; import net.minecraftforge.common.MinecraftForge; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/events/OnBlockBreakSoundEffect.java b/src/main/java/io/github/moulberry/notenoughupdates/events/OnBlockBreakSoundEffect.java index aeffa7da..9a2516e1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/events/OnBlockBreakSoundEffect.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/events/OnBlockBreakSoundEffect.java @@ -1,6 +1,24 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.events; -import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.client.audio.ISound; import net.minecraft.util.BlockPos; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/events/RepositoryReloadEvent.java b/src/main/java/io/github/moulberry/notenoughupdates/events/RepositoryReloadEvent.java index b0ffc3e7..bf6448a2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/events/RepositoryReloadEvent.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/events/RepositoryReloadEvent.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.events; import java.io.File; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/DevInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/DevInfoPane.java index 945dd71c..a449919e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/DevInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/DevInfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/FlipperInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/FlipperInfoPane.java index 441bf735..4b6c73f4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/FlipperInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/FlipperInfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import io.github.moulberry.notenoughupdates.NEUManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java index e4098f3e..03f55561 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import info.bliki.htmlcleaner.TagNode; @@ -26,7 +45,16 @@ import org.apache.commons.lang3.SystemUtils; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.nio.charset.CharsetEncoder; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/InfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/InfoPane.java index 03cb64f6..5f73e57a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/InfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/InfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import io.github.moulberry.notenoughupdates.NEUManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/ScrollableInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/ScrollableInfoPane.java index 75b66770..9bc47fc5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/ScrollableInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/ScrollableInfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import io.github.moulberry.notenoughupdates.NEUManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/TextInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/TextInfoPane.java index 77d47a3d..90bed1fa 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/TextInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/TextInfoPane.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.infopanes; import io.github.moulberry.notenoughupdates.NEUManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElement.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElement.java index 38ad2824..ab277078 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElement.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElement.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.itemeditor; import net.minecraft.client.gui.Gui; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementButton.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementButton.java index 35b31490..54cba6b8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementButton.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementButton.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.itemeditor; import java.awt.*; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementText.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementText.java index 1e7a8c08..9f612fcf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementText.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementText.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.itemeditor; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java index f37f2fa1..71c4d498 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.itemeditor; import io.github.moulberry.notenoughupdates.util.Utils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/NEUItemEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/NEUItemEditor.java index 7e776bcd..ff0e5f13 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/NEUItemEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/NEUItemEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.itemeditor; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java index e4f0b3da..408c8a6d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -24,7 +43,10 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static io.github.moulberry.notenoughupdates.overlays.SlayerOverlay.*; +import static io.github.moulberry.notenoughupdates.overlays.SlayerOverlay.RNGMeter; +import static io.github.moulberry.notenoughupdates.overlays.SlayerOverlay.slayerXp; +import static io.github.moulberry.notenoughupdates.overlays.SlayerOverlay.timeSinceLastBoss; +import static io.github.moulberry.notenoughupdates.overlays.SlayerOverlay.timeSinceLastBoss2; public class ChatListener { private final NotEnoughUpdates neu; @@ -124,7 +146,7 @@ public class ChatListener { public void onGuiChat(ClientChatReceivedEvent e) { if (e.type == 2) { CrystalMetalDetectorSolver.process(e.message); - TimersOverlay.processActionBar(e.message.getUnformattedText()); + TimersOverlay.processActionBar(e.message.getUnformattedText()); e.message = processChatComponent(e.message); return; } else if (e.type == 0) { @@ -145,10 +167,11 @@ public class ChatListener { .substring("Your profile was changed to: ".length()) .split(" ")[0].trim()); } else if (unformatted.startsWith("Your new API key is ")) { - NotEnoughUpdates.INSTANCE.config.apiData.apiKey = unformatted.substring("Your new API key is ".length()).substring( - 0, - 36 - ); + NotEnoughUpdates.INSTANCE.config.apiData.apiKey = + unformatted.substring("Your new API key is ".length()).substring( + 0, + 36 + ); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText( EnumChatFormatting.YELLOW + "[NEU] API Key automatically configured")); } else if (unformatted.startsWith("Player List Info is now disabled!")) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/ItemTooltipListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/ItemTooltipListener.java index ab4e9dca..fab02bf9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/ItemTooltipListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/ItemTooltipListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import com.google.gson.JsonArray; @@ -46,7 +65,6 @@ import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; public class ItemTooltipListener { private static final String petToolTipRegex = diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java index d070fc2d..ec459ad0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/OldAnimationChecker.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/OldAnimationChecker.java index e537b2b7..7858918b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/OldAnimationChecker.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/OldAnimationChecker.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java index 610412ac..aedca6e3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import com.google.common.collect.Lists; @@ -900,7 +919,12 @@ public class RenderListener { GuiChest eventGui = (GuiChest) guiScreen; ContainerChest cc = (ContainerChest) eventGui.inventorySlots; containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); - if (containerName.contains(" Profile") && BetterContainers.profileViewerStackIndex != -1 && ((AccessorGuiContainer)eventGui).doIsMouseOverSlot(cc.inventorySlots.get(BetterContainers.profileViewerStackIndex), mouseX, mouseY) && + if (containerName.contains(" Profile") && BetterContainers.profileViewerStackIndex != -1 && + ((AccessorGuiContainer) eventGui).doIsMouseOverSlot( + cc.inventorySlots.get(BetterContainers.profileViewerStackIndex), + mouseX, + mouseY + ) && Mouse.getEventButton() >= 0) { event.setCanceled(true); if (Mouse.getEventButtonState() && eventGui.inventorySlots.inventorySlots.get(22).getStack() != null && @@ -1047,7 +1071,10 @@ public class RenderListener { "config/notenoughupdates/repo/constants/essencecosts.json" ); String fileContent; - fileContent = new BufferedReader(new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8)) + fileContent = new BufferedReader(new InputStreamReader( + Files.newInputStream(file.toPath()), + StandardCharsets.UTF_8 + )) .lines() .collect(Collectors.joining(System.lineSeparator())); String id = null; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/ScoreboardLocationChangeListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/ScoreboardLocationChangeListener.java index 2f4ec33c..622b2088 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/ScoreboardLocationChangeListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/ScoreboardLocationChangeListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.listener; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBAnchorPoint.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBAnchorPoint.java index eaf41ba6..7193b47f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBAnchorPoint.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBAnchorPoint.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; import org.lwjgl.util.vector.Vector2f; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBDeserializer.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBDeserializer.java index b9e858ef..5f530c00 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBDeserializer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBDeserializer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiElement.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiElement.java index ad836097..3e3ab1e3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiElement.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiElement.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; public abstract class MBGuiElement { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroup.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroup.java index 4540b146..b183bd1e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroup.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroup.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; import org.lwjgl.util.vector.Vector2f; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupAligned.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupAligned.java index eef4b5e5..5c0cd37e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupAligned.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupAligned.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; import org.lwjgl.util.vector.Vector2f; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupFloating.java b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupFloating.java index 24697cc6..c57f0b74 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupFloating.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mbgui/MBGuiGroupFloating.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mbgui; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -10,7 +29,11 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.gui.inventory.GuiContainer; import org.lwjgl.util.vector.Vector2f; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; public class MBGuiGroupFloating extends MBGuiGroup { private GuiScreen lastScreen = null; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java index 3bae4715..c52f8968 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java index 5137c90f..97e32749 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -58,8 +77,9 @@ public class AuctionSortModeWarning { String warningText = "\u00a7aSort: " + selectedColour + selectedSort; int warningLength = Minecraft.getMinecraft().fontRendererObj.getStringWidth(warningText); - int centerX = ((AccessorGuiContainer)chest).getGuiLeft() + ((AccessorGuiContainer)chest).getXSize() / 2 + 9; - int centerY = ((AccessorGuiContainer)chest).getGuiTop() + 26; + int centerX = + ((AccessorGuiContainer) chest).getGuiLeft() + ((AccessorGuiContainer) chest).getXSize() / 2 + 9; + int centerY = ((AccessorGuiContainer) chest).getGuiTop() + 26; RenderUtils.drawFloatingRectDark(centerX - warningLength / 2 - 4, centerY - 6, warningLength + 8, 12, false diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java index 811c30d2..e51496e3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CookieWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CookieWarning.java index 0abd5216..2aec0fbe 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CookieWarning.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CookieWarning.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.common.collect.Lists; @@ -20,7 +39,7 @@ public class CookieWarning { @SubscribeEvent public void onJoinWorld(EntityJoinWorldEvent e) { - if(e.entity == Minecraft.getMinecraft().thePlayer) { + if (e.entity == Minecraft.getMinecraft().thePlayer) { this.checkCookie(); } } @@ -33,24 +52,27 @@ public class CookieWarning { * Checks the tab list for a cookie timer, and sends a chat message if the timer is within the tolerance */ private void checkCookie() { - if(!hasNotified && NotEnoughUpdates.INSTANCE.config.notifications.doBoosterNotif) { + if (!hasNotified && NotEnoughUpdates.INSTANCE.config.notifications.doBoosterNotif) { String[] lines = {}; try { - lines = ((AccessorGuiPlayerTabOverlay) Minecraft.getMinecraft().ingameGUI.getTabList()).getFooter().getUnformattedText().split("\n"); - } catch(NullPointerException e) { + lines = ((AccessorGuiPlayerTabOverlay) Minecraft.getMinecraft().ingameGUI.getTabList()) + .getFooter() + .getUnformattedText() + .split("\n"); + } catch (NullPointerException e) { return; // if the footer is null or somehow doesn't exist, stop } boolean hasCookie = true; String timeLine = null; // the line that contains the cookie timer - for(int i = 0; i < lines.length; i++) { - if(lines[i].startsWith("Cookie Buff")) { - timeLine = lines[i+1]; // the line after the "Cookie Buff" line + for (int i = 0; i < lines.length; i++) { + if (lines[i].startsWith("Cookie Buff")) { + timeLine = lines[i + 1]; // the line after the "Cookie Buff" line } - if(lines[i].startsWith("Not active! Obtain booster cookies from the")) { + if (lines[i].startsWith("Not active! Obtain booster cookies from the")) { hasCookie = false; } } - if(!hasCookie) { + if (!hasCookie) { NotificationHandler.displayNotification(Lists.newArrayList( "\u00a7cBooster Cookie Ran Out!", "\u00a77Your Booster Cookie expired!", @@ -60,21 +82,21 @@ public class CookieWarning { hasNotified = true; return; } - if(timeLine != null) { + if (timeLine != null) { String[] digits = timeLine.split(" "); int minutes = 0; try { - for(String digit : digits) { - if(digit.endsWith("y")) { + for (String digit : digits) { + if (digit.endsWith("y")) { digit = digit.substring(0, digit.length() - 1); minutes += Integer.parseInt(digit) * 525600; - } else if(digit.endsWith("d")) { + } else if (digit.endsWith("d")) { digit = digit.substring(0, digit.length() - 1); minutes += Integer.parseInt(digit) * 1440; - } else if(digit.endsWith("h")) { + } else if (digit.endsWith("h")) { digit = digit.substring(0, digit.length() - 1); minutes += Integer.parseInt(digit) * 60; - } else if(digit.endsWith("m")) { + } else if (digit.endsWith("m")) { digit = digit.substring(0, digit.length() - 1); minutes += Integer.parseInt(digit); } // ignore seconds @@ -85,7 +107,7 @@ public class CookieWarning { EnumChatFormatting.RED + "NEU ran into an issue when retrieving the Booster Cookie Timer. Check the logs for details.")); } - if(minutes < NotEnoughUpdates.INSTANCE.config.notifications.boosterCookieWarningMins) { + if (minutes < NotEnoughUpdates.INSTANCE.config.notifications.boosterCookieWarningMins) { NotificationHandler.displayNotification(Lists.newArrayList( "\u00a7cBooster Cookie Running Low!", "\u00a77Your Booster Cookie will expire in " + timeLine, diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java index f43ebda2..167b6a2f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolver.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -52,56 +71,56 @@ public class CrystalMetalDetectorSolver { private static final String EMERALD_STRING = "emerald"; private static final String GOLD_STRING = "gold"; private static final HashMap keeperOffsets = new HashMap() {{ - put(DIAMOND_STRING, new Vec3i(33,0,3)); - put(LAPIS_STRING, new Vec3i(-33,0,-3)); - put(EMERALD_STRING, new Vec3i(-3,0,33)); - put(GOLD_STRING, new Vec3i(3,0,-33)); + put(DIAMOND_STRING, new Vec3i(33, 0, 3)); + put(LAPIS_STRING, new Vec3i(-33, 0, -3)); + put(EMERALD_STRING, new Vec3i(-3, 0, 33)); + put(GOLD_STRING, new Vec3i(3, 0, -33)); }}; // Chest offsets from center private static final HashSet knownChestOffsets = new HashSet<>(Arrays.asList( - -10171958951910L, // x=-38, y=-22, z=26 - 10718829084646L, // x=38, y=-22, z=-26 - -10721714765806L, // x=-40, y=-22, z=18 - -10996458455018L, // x=-41, y=-20, z=22 - -1100920913904L, // x=-5, y=-21, z=16 - 11268584898530L, // x=40, y=-22, z=-30 - -11271269253148L, // x=-42, y=-20, z=-28 - -11546281377832L, // x=-43, y=-22, z=-40 - 11818542038999L, // x=42, y=-19, z=-41 - 12093285728240L, // x=43, y=-21, z=-16 - -1409286164L, // x=-1, y=-22, z=-20 - 1922736062492L, // x=6, y=-21, z=28 - 2197613969419L, // x=7, y=-21, z=11 - 2197613969430L, // x=7, y=-21, z=22 - -3024999153708L, // x=-12, y=-21, z=-44 - 3571936395295L, // x=12, y=-22, z=31 - 3572003504106L, // x=12, y=-22, z=-22 - 3572003504135L, // x=12, y=-21, z=7 - 3572070612949L, // x=12, y=-21, z=-43 - -3574822076373L, // x=-14, y=-21, z=43 - -3574822076394L, // x=-14, y=-21, z=22 - -4399455797228L, // x=-17, y=-21, z=20 - -5224156626944L, // x=-20, y=-22, z=0 - 548346527764L, // x=1, y=-21, z=20 - 5496081743901L, // x=19, y=-22, z=29 - 5770959650816L, // x=20, y=-22, z=0 - 5771093868518L, // x=20, y=-21, z=-26 - -6048790347736L, // x=-23, y=-22, z=40 - 6320849682418L, // x=22, y=-21, z=-14 - -6323668254708L, // x=-24, y=-22, z=12 - 6595593371674L, // x=23, y=-22, z=26 - 6595660480473L, // x=23, y=-22, z=-39 - 6870471278619L, // x=24, y=-22, z=27 - 7145349185553L, // x=25, y=-22, z=17 - 8244995030996L, // x=29, y=-21, z=-44 - -8247679385612L, // x=-31, y=-21, z=-12 - -8247679385640L, // x=-31, y=-21, z=-40 - 8519872937959L, // x=30, y=-21, z=-25 - -8522557292584L, // x=-32, y=-21, z=-40 - -9622068920278L, // x=-36, y=-20, z=42 - -9896946827278L, // x=-37, y=-21, z=-14 - -9896946827286L // x=-37, y=-21, z=-22 + -10171958951910L, // x=-38, y=-22, z=26 + 10718829084646L, // x=38, y=-22, z=-26 + -10721714765806L, // x=-40, y=-22, z=18 + -10996458455018L, // x=-41, y=-20, z=22 + -1100920913904L, // x=-5, y=-21, z=16 + 11268584898530L, // x=40, y=-22, z=-30 + -11271269253148L, // x=-42, y=-20, z=-28 + -11546281377832L, // x=-43, y=-22, z=-40 + 11818542038999L, // x=42, y=-19, z=-41 + 12093285728240L, // x=43, y=-21, z=-16 + -1409286164L, // x=-1, y=-22, z=-20 + 1922736062492L, // x=6, y=-21, z=28 + 2197613969419L, // x=7, y=-21, z=11 + 2197613969430L, // x=7, y=-21, z=22 + -3024999153708L, // x=-12, y=-21, z=-44 + 3571936395295L, // x=12, y=-22, z=31 + 3572003504106L, // x=12, y=-22, z=-22 + 3572003504135L, // x=12, y=-21, z=7 + 3572070612949L, // x=12, y=-21, z=-43 + -3574822076373L, // x=-14, y=-21, z=43 + -3574822076394L, // x=-14, y=-21, z=22 + -4399455797228L, // x=-17, y=-21, z=20 + -5224156626944L, // x=-20, y=-22, z=0 + 548346527764L, // x=1, y=-21, z=20 + 5496081743901L, // x=19, y=-22, z=29 + 5770959650816L, // x=20, y=-22, z=0 + 5771093868518L, // x=20, y=-21, z=-26 + -6048790347736L, // x=-23, y=-22, z=40 + 6320849682418L, // x=22, y=-21, z=-14 + -6323668254708L, // x=-24, y=-22, z=12 + 6595593371674L, // x=23, y=-22, z=26 + 6595660480473L, // x=23, y=-22, z=-39 + 6870471278619L, // x=24, y=-22, z=27 + 7145349185553L, // x=25, y=-22, z=17 + 8244995030996L, // x=29, y=-21, z=-44 + -8247679385612L, // x=-31, y=-21, z=-12 + -8247679385640L, // x=-31, y=-21, z=-40 + 8519872937959L, // x=30, y=-21, z=-25 + -8522557292584L, // x=-32, y=-21, z=-40 + -9622068920278L, // x=-36, y=-20, z=42 + -9896946827278L, // x=-37, y=-21, z=-14 + -9896946827286L // x=-37, y=-21, z=-22 )); static Predicate treasureAllowedPredicate = CrystalMetalDetectorSolver::treasureAllowed; @@ -153,9 +172,11 @@ public class CrystalMetalDetectorSolver { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "[NEU] Found solution.")); if (NotEnoughUpdates.INSTANCE.config.hidden.debugFlags.contains(NEUDebugFlag.METAL) && (previousState == SolutionState.INVALID || previousState == SolutionState.FAILED)) { - NEUDebugLogger.log(NEUDebugFlag.METAL, + NEUDebugLogger.log( + NEUDebugFlag.METAL, EnumChatFormatting.AQUA + "Solution coordinates: " + - EnumChatFormatting.WHITE + possibleBlocks.iterator().next().toString()); + EnumChatFormatting.WHITE + possibleBlocks.iterator().next().toString() + ); } break; case INVALID: @@ -184,9 +205,9 @@ public class CrystalMetalDetectorSolver { } static void findPossibleSolutions(double distToTreasure, Vec3Comparable playerPos, boolean centerNewlyDiscovered) { - if (prevDistToTreasure == distToTreasure && prevPlayerPos.equals(playerPos) && - !evaluatedPlayerPositions.containsKey(playerPos)) { - evaluatedPlayerPositions.put(playerPos, distToTreasure); + if (prevDistToTreasure == distToTreasure && prevPlayerPos.equals(playerPos) && + !evaluatedPlayerPositions.containsKey(playerPos)) { + evaluatedPlayerPositions.put(playerPos, distToTreasure); if (possibleBlocks.size() == 0) { for (int zOffset = (int) Math.floor(-distToTreasure); zOffset <= Math.ceil(distToTreasure); zOffset++) { for (int y = 65; y <= 75; y++) { @@ -259,7 +280,7 @@ public class CrystalMetalDetectorSolver { if (minesCenter != Vec3i.NULL_VECTOR) { BlockPos relativeOffset = blockPos.subtract(minesCenter); sb.append(", Relative: "); - sb.append(relativeOffset.toString() ); + sb.append(relativeOffset.toString()); sb.append(" (" + relativeOffset.toLong() + ")"); } sb.append("\n"); @@ -296,7 +317,7 @@ public class CrystalMetalDetectorSolver { if (chestFound) { prevPlayerPos = null; prevDistToTreasure = 0; - if (possibleBlocks.size() == 1) { + if (possibleBlocks.size() == 1) { openedChestPositions.add(possibleBlocks.iterator().next().getImmutable()); } } @@ -360,11 +381,11 @@ public class CrystalMetalDetectorSolver { EntityArmorStand keeperEntity = keeperEntities.get(0); String keeperName = keeperEntity.getCustomNameTag(); - NEUDebugLogger.log(NEUDebugFlag.METAL,"Locating center using Keeper: " + + NEUDebugLogger.log(NEUDebugFlag.METAL, "Locating center using Keeper: " + EnumChatFormatting.WHITE + keeperEntity); String keeperType = keeperName.substring(keeperName.indexOf(KEEPER_OF_STRING) + KEEPER_OF_STRING.length()); - minesCenter = keeperEntity.getPosition().add(keeperOffsets.get(keeperType.toLowerCase())); - NEUDebugLogger.log(NEUDebugFlag.METAL,"Mines center: " + + minesCenter = keeperEntity.getPosition().add(keeperOffsets.get(keeperType.toLowerCase())); + NEUDebugLogger.log(NEUDebugFlag.METAL, "Mines center: " + EnumChatFormatting.WHITE + minesCenter.toString()); mc.thePlayer.addChatMessage(new ChatComponentText( EnumChatFormatting.YELLOW + "[NEU] Faster treasure hunting is now enabled based on Keeper location.")); @@ -538,8 +559,7 @@ public class CrystalMetalDetectorSolver { return; } - if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) - { + if (!NotEnoughUpdates.INSTANCE.config.mining.metalDetectorEnabled) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Metal Detector Solver is not enabled.")); return; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java index 2b095c42..c0653742 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java index 1bc26d50..19cf9c09 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolver.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -74,6 +93,7 @@ public class CrystalWishingCompassSolver { } private static final CrystalWishingCompassSolver INSTANCE = new CrystalWishingCompassSolver(); + public static CrystalWishingCompassSolver getInstance() { return INSTANCE; } @@ -118,9 +138,11 @@ public class CrystalWishingCompassSolver { public LongSupplier currentTimeMillis = System::currentTimeMillis; public BooleanSupplier kingsScentPresent = this::isKingsScentPresent; public BooleanSupplier keyInInventory = this::isKeyInInventory; + public interface CrystalEnumSetSupplier { EnumSet getAsCrystalEnumSet(); } + public CrystalEnumSetSupplier foundCrystals = this::getFoundCrystals; private SolverState solverState; @@ -159,7 +181,7 @@ public class CrystalWishingCompassSolver { } private void resetForNewTarget() { - NEUDebugLogger.log(NEUDebugFlag.WISHING,"Resetting for new target"); + NEUDebugLogger.log(NEUDebugFlag.WISHING, "Resetting for new target"); solverState = SolverState.NOT_STARTED; firstCompass = null; secondCompass = null; @@ -188,7 +210,7 @@ public class CrystalWishingCompassSolver { event.entityPlayer != mc.thePlayer || (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR && event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) - ) { + ) { return; } @@ -248,57 +270,57 @@ public class CrystalWishingCompassSolver { public HandleCompassResult handleCompassUse(BlockPos playerPos) { long lastCompassUsedMillis = 0; switch (solverState) { - case PROCESSING_SECOND_USE: - if (secondCompass != null) { - lastCompassUsedMillis = secondCompass.whenUsedMillis; - } - case PROCESSING_FIRST_USE: - if (lastCompassUsedMillis == 0 && firstCompass != null) { - lastCompassUsedMillis = firstCompass.whenUsedMillis; - } - if (lastCompassUsedMillis != 0 && - (currentTimeMillis.getAsLong() > lastCompassUsedMillis + ALL_PARTICLES_MAX_MILLIS)) { - return HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; - } - - return HandleCompassResult.STILL_PROCESSING_PRIOR_USE; - case SOLVED: - case FAILED_EXCEPTION: - case FAILED_TIMEOUT_NO_REPEATING: - case FAILED_TIMEOUT_NO_PARTICLES: - case FAILED_INTERSECTION_CALCULATION: - case FAILED_INVALID_SOLUTION: + case PROCESSING_SECOND_USE: + if (secondCompass != null) { + lastCompassUsedMillis = secondCompass.whenUsedMillis; + } + case PROCESSING_FIRST_USE: + if (lastCompassUsedMillis == 0 && firstCompass != null) { + lastCompassUsedMillis = firstCompass.whenUsedMillis; + } + if (lastCompassUsedMillis != 0 && + (currentTimeMillis.getAsLong() > lastCompassUsedMillis + ALL_PARTICLES_MAX_MILLIS)) { + return HandleCompassResult.NO_PARTICLES_FOR_PREVIOUS_COMPASS; + } + + return HandleCompassResult.STILL_PROCESSING_PRIOR_USE; + case SOLVED: + case FAILED_EXCEPTION: + case FAILED_TIMEOUT_NO_REPEATING: + case FAILED_TIMEOUT_NO_PARTICLES: + case FAILED_INTERSECTION_CALCULATION: + case FAILED_INVALID_SOLUTION: + resetForNewTarget(); + // falls through, NOT_STARTED is the state when resetForNewTarget returns + case NOT_STARTED: + if (NUCLEUS_BB.isVecInside(new Vec3Comparable(playerPos.getX(), playerPos.getY(), playerPos.getZ()))) { + return HandleCompassResult.PLAYER_IN_NUCLEUS; + } + + firstCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); + seenParticles.clear(); + solverState = SolverState.PROCESSING_FIRST_USE; + possibleTargets = calculatePossibleTargets(playerPos); + return HandleCompassResult.SUCCESS; + case NEED_SECOND_COMPASS: + if (firstCompass.whereUsed.distanceSq(playerPos) < MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES) { + return HandleCompassResult.LOCATION_TOO_CLOSE; + } + + HollowsZone firstCompassZone = getZoneForCoords(firstCompass.whereUsed); + HollowsZone playerZone = getZoneForCoords(playerPos); + if (!possibleTargets.equals(calculatePossibleTargets(playerPos)) || + firstCompassZone != playerZone) { resetForNewTarget(); - // falls through, NOT_STARTED is the state when resetForNewTarget returns - case NOT_STARTED: - if (NUCLEUS_BB.isVecInside(new Vec3Comparable(playerPos.getX(), playerPos.getY(), playerPos.getZ()))) { - return HandleCompassResult.PLAYER_IN_NUCLEUS; - } - - firstCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); - seenParticles.clear(); - solverState = SolverState.PROCESSING_FIRST_USE; - possibleTargets = calculatePossibleTargets(playerPos); - return HandleCompassResult.SUCCESS; - case NEED_SECOND_COMPASS: - if (firstCompass.whereUsed.distanceSq(playerPos) < MINIMUM_DISTANCE_SQ_BETWEEN_COMPASSES) { - return HandleCompassResult.LOCATION_TOO_CLOSE; - } - - HollowsZone firstCompassZone = getZoneForCoords(firstCompass.whereUsed); - HollowsZone playerZone = getZoneForCoords(playerPos); - if (!possibleTargets.equals(calculatePossibleTargets(playerPos)) || - firstCompassZone != playerZone) { - resetForNewTarget(); - return HandleCompassResult.POSSIBLE_TARGETS_CHANGED; - } - - secondCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); - solverState = SolverState.PROCESSING_SECOND_USE; - return HandleCompassResult.SUCCESS; - } + return HandleCompassResult.POSSIBLE_TARGETS_CHANGED; + } + + secondCompass = new Compass(playerPos, currentTimeMillis.getAsLong()); + solverState = SolverState.PROCESSING_SECOND_USE; + return HandleCompassResult.SUCCESS; + } - throw new IllegalStateException("Unexpected compass state" ); + throw new IllegalStateException("Unexpected compass state"); } /* @@ -338,7 +360,7 @@ public class CrystalWishingCompassSolver { // Capture particle troubleshooting info for two minutes starting when the first compass is used. // This list is reset each time the first compass is used from a NOT_STARTED state. if (firstCompass != null && !solverState.equals(SolverState.SOLVED) && - System.currentTimeMillis() < firstCompass.whenUsedMillis + 2*60*1000) { + System.currentTimeMillis() < firstCompass.whenUsedMillis + 2 * 60 * 1000) { seenParticles.add(new ParticleData(new Vec3Comparable(x, y, z), System.currentTimeMillis())); } @@ -376,9 +398,9 @@ public class CrystalWishingCompassSolver { logDiagnosticData(false); break; case NEED_SECOND_COMPASS: - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + - "[NEU] Need another position to determine wishing compass target.")); - break; + mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + + "[NEU] Need another position to determine wishing compass target.")); + break; } } } catch (Exception e) { @@ -389,7 +411,6 @@ public class CrystalWishingCompassSolver { } /** - * * @param x Particle x coordinate * @param y Particle y coordinate * @param z Particle z coordinate @@ -454,7 +475,8 @@ public class CrystalWishingCompassSolver { getZoneForCoords(firstCompass.whereUsed), foundCrystals.getAsCrystalEnumSet(), possibleTargets, - solution); + solution + ); // Adjust the Jungle Temple solution coordinates if (solutionPossibleTargets.size() == 1 && @@ -466,9 +488,8 @@ public class CrystalWishingCompassSolver { solverState = SolverState.SOLVED; } - private boolean isKeyInInventory() - { - for (ItemStack item : mc.thePlayer.inventory.mainInventory){ + private boolean isKeyInInventory() { + for (ItemStack item : mc.thePlayer.inventory.mainInventory) { if (item != null && item.getDisplayName().contains("Jungle Key")) { return true; } @@ -476,12 +497,11 @@ public class CrystalWishingCompassSolver { return false; } - private boolean isKingsScentPresent() - { + private boolean isKingsScentPresent() { return SBInfo.getInstance().footer.getUnformattedText().contains("King's Scent I"); } - private EnumSet getFoundCrystals() { + private EnumSet getFoundCrystals() { EnumSet foundCrystals = EnumSet.noneOf(Crystal.class); NEUConfig.HiddenProfileSpecific perProfileConfig = NotEnoughUpdates.INSTANCE.config.getProfileSpecific(); if (perProfileConfig == null) return foundCrystals; @@ -523,10 +543,11 @@ public class CrystalWishingCompassSolver { // | Holdout | Deposits | // |----------|------------| static public EnumSet getSolutionTargets( - HollowsZone compassUsedZone, - EnumSet foundCrystals, - EnumSet possibleTargets, - Vec3Comparable solution) { + HollowsZone compassUsedZone, + EnumSet foundCrystals, + EnumSet possibleTargets, + Vec3Comparable solution + ) { EnumSet solutionPossibleTargets; solutionPossibleTargets = possibleTargets.clone(); @@ -541,28 +562,28 @@ public class CrystalWishingCompassSolver { // Y=41/74 is the absolute min/max based on structure size if // the center of the topaz crystal has to be in magma fields. if (solutionPossibleTargets.contains(CompassTarget.BAL) && - solution.yCoord > 75) { + solution.yCoord > 75) { solutionPossibleTargets.remove(CompassTarget.BAL); } // Y coordinates are 93-157 from 15 samples. // Y=83/167 is the absolute min/max based on structure size if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && - solution.yCoord < 82 || solution.yCoord > 168) { + solution.yCoord < 82 || solution.yCoord > 168) { solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); } // Y coordinates are 129-139 from 10 samples // Y=126/139 is the absolute min/max based on structure size if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && - (solution.yCoord < 125 || solution.yCoord > 140)) { + (solution.yCoord < 125 || solution.yCoord > 140)) { solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); } // Y coordinates are 72-80 from 10 samples // Y=73/80 is the absolute min/max based on structure size if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && - (solution.yCoord < 72 || solution.yCoord > 81)) { + (solution.yCoord < 72 || solution.yCoord > 81)) { solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); } @@ -576,7 +597,7 @@ public class CrystalWishingCompassSolver { // Y coordinates are 122-129 from 8 samples // Y=122/129 is the absolute min/max based on structure size if (solutionPossibleTargets.contains(CompassTarget.PRECURSOR_CITY) && - (solution.yCoord < 121 || solution.yCoord > 130)) { + (solution.yCoord < 121 || solution.yCoord > 130)) { solutionPossibleTargets.remove(CompassTarget.PRECURSOR_CITY); } @@ -584,26 +605,26 @@ public class CrystalWishingCompassSolver { // Y=98/100 is the absolute min/max based on structure size, // but 102 has been seen - possibly with earlier code that rounded up if (solutionPossibleTargets.contains(CompassTarget.MINES_OF_DIVAN) && - (solution.yCoord < 97 || solution.yCoord > 102)) { + (solution.yCoord < 97 || solution.yCoord > 102)) { solutionPossibleTargets.remove(CompassTarget.MINES_OF_DIVAN); } // Now filter by structure offset if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_KING) && (solution.xCoord > GOBLIN_HOLDOUT_BB.maxX + GOBLIN_KING_BB.maxX || - solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_KING_BB.maxZ)) { + solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_KING_BB.maxZ)) { solutionPossibleTargets.remove(CompassTarget.GOBLIN_KING); } if (solutionPossibleTargets.contains(CompassTarget.GOBLIN_QUEEN) && (solution.xCoord > GOBLIN_HOLDOUT_BB.maxX + GOBLIN_QUEEN_BB.maxX || - solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_QUEEN_BB.maxZ)) { + solution.zCoord < GOBLIN_HOLDOUT_BB.minZ - GOBLIN_QUEEN_BB.maxZ)) { solutionPossibleTargets.remove(CompassTarget.GOBLIN_QUEEN); } if (solutionPossibleTargets.contains(CompassTarget.JUNGLE_TEMPLE) && (solution.xCoord > JUNGLE_BB.maxX + JUNGLE_TEMPLE_BB.maxX || - solution.zCoord > JUNGLE_BB.maxZ + JUNGLE_TEMPLE_BB.maxZ)) { + solution.zCoord > JUNGLE_BB.maxZ + JUNGLE_TEMPLE_BB.maxZ)) { solutionPossibleTargets.remove(CompassTarget.JUNGLE_TEMPLE); } @@ -677,38 +698,54 @@ public class CrystalWishingCompassSolver { private String getFriendlyNameForCompassTarget(CompassTarget compassTarget) { switch (compassTarget) { - case BAL: return EnumChatFormatting.RED + "Bal"; - case ODAWA: return EnumChatFormatting.GREEN + "Odawa"; - case JUNGLE_TEMPLE: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.GREEN + "Jungle Temple"; - case GOBLIN_KING: return EnumChatFormatting.GOLD + "King Yolkar"; - case GOBLIN_QUEEN: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.YELLOW + "Goblin Queen"; - case PRECURSOR_CITY: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.WHITE + "Precursor City"; - case MINES_OF_DIVAN: return EnumChatFormatting.AQUA + "the " + - EnumChatFormatting.BLUE + "Mines of Divan"; - default: return EnumChatFormatting.WHITE + "an undetermined location"; + case BAL: + return EnumChatFormatting.RED + "Bal"; + case ODAWA: + return EnumChatFormatting.GREEN + "Odawa"; + case JUNGLE_TEMPLE: + return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.GREEN + "Jungle Temple"; + case GOBLIN_KING: + return EnumChatFormatting.GOLD + "King Yolkar"; + case GOBLIN_QUEEN: + return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.YELLOW + "Goblin Queen"; + case PRECURSOR_CITY: + return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.WHITE + "Precursor City"; + case MINES_OF_DIVAN: + return EnumChatFormatting.AQUA + "the " + + EnumChatFormatting.BLUE + "Mines of Divan"; + default: + return EnumChatFormatting.WHITE + "an undetermined location"; } } private String getNameForCompassTarget(CompassTarget compassTarget) { boolean useSkytilsNames = (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassWaypointNames == 1); switch (compassTarget) { - case BAL: return useSkytilsNames ? "internal_bal" : "Bal"; - case ODAWA: return "Odawa"; - case JUNGLE_TEMPLE: return useSkytilsNames ? "internal_temple" : "Temple"; - case GOBLIN_KING: return useSkytilsNames ? "internal_king" : "King"; - case GOBLIN_QUEEN: return useSkytilsNames ? "internal_den" : "Queen"; - case PRECURSOR_CITY: return useSkytilsNames ? "internal_city" : "City"; - case MINES_OF_DIVAN: return useSkytilsNames ? "internal_mines" : "Mines"; - default: return "WishingTarget"; + case BAL: + return useSkytilsNames ? "internal_bal" : "Bal"; + case ODAWA: + return "Odawa"; + case JUNGLE_TEMPLE: + return useSkytilsNames ? "internal_temple" : "Temple"; + case GOBLIN_KING: + return useSkytilsNames ? "internal_king" : "King"; + case GOBLIN_QUEEN: + return useSkytilsNames ? "internal_den" : "Queen"; + case PRECURSOR_CITY: + return useSkytilsNames ? "internal_city" : "City"; + case MINES_OF_DIVAN: + return useSkytilsNames ? "internal_mines" : "Mines"; + default: + return "WishingTarget"; } } private String getSolutionCoordsText() { return solution == null ? "" : - String.format("%.0f %.0f %.0f", solution.xCoord, solution.yCoord, solution.zCoord); + String.format("%.0f %.0f %.0f", solution.xCoord, solution.yCoord, solution.zCoord); } private String getWishingCompassDestinationsMessage() { @@ -759,21 +796,23 @@ public class CrystalWishingCompassSolver { "WishingTarget"; String skytilsCommand = String.format("/sthw add %s %s", getSolutionCoordsText(), targetNameForSkytils); if (NotEnoughUpdates.INSTANCE.config.mining.wishingCompassAutocreateKnownWaypoints && - solutionPossibleTargets.size() == 1) { + solutionPossibleTargets.size() == 1) { mc.thePlayer.addChatMessage(new ChatComponentText(destinationMessage)); int commandResult = ClientCommandHandler.instance.executeCommand(mc.thePlayer, skytilsCommand); - if (commandResult == 1) - { + if (commandResult == 1) { return; } - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Failed to automatically run /sthw")); + mc.thePlayer.addChatMessage(new ChatComponentText( + EnumChatFormatting.RED + "[NEU] Failed to automatically run /sthw")); } destinationMessage += EnumChatFormatting.YELLOW + " [Add Skytils Waypoint]"; ChatComponentText chatMessage = new ChatComponentText(destinationMessage); - chatMessage.setChatStyle(Utils.createClickStyle(ClickEvent.Action.RUN_COMMAND, - skytilsCommand, - EnumChatFormatting.YELLOW + "Set waypoint for wishing target")); + chatMessage.setChatStyle(Utils.createClickStyle( + ClickEvent.Action.RUN_COMMAND, + skytilsCommand, + EnumChatFormatting.YELLOW + "Set waypoint for wishing target" + )); mc.thePlayer.addChatMessage(chatMessage); } @@ -878,8 +917,7 @@ public class CrystalWishingCompassSolver { return; } - if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) - { + if (!NotEnoughUpdates.INSTANCE.config.mining.wishingCompassSolver) { mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[NEU] Wishing Compass Solver is not enabled.")); return; @@ -951,8 +989,8 @@ public class CrystalWishingCompassSolver { public void processParticle(double x, double y, double z, long particleTimeMillis) { if (compassState == CompassState.FAILED_TIMEOUT_NO_REPEATING || - compassState == CompassState.FAILED_TIMEOUT_NO_PARTICLES || - compassState == CompassState.COMPLETED) { + compassState == CompassState.FAILED_TIMEOUT_NO_PARTICLES || + compassState == CompassState.COMPLETED) { throw new UnsupportedOperationException("processParticle should not be called in a failed or completed state"); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomItemEffects.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomItemEffects.java index e621cf78..ca9a92cb 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomItemEffects.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomItemEffects.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -11,7 +30,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -24,7 +47,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.*; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -36,8 +65,14 @@ import org.lwjgl.util.vector.Vector3f; import java.awt.*; import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; import java.util.List; -import java.util.*; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomSkulls.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomSkulls.java index 1157e73a..95ec0f7a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomSkulls.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CustomSkulls.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.common.collect.Maps; @@ -14,8 +33,17 @@ import net.minecraft.client.model.ModelSkeletonHead; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.block.model.*; -import net.minecraft.client.renderer.texture.*; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.BlockPart; +import net.minecraft.client.renderer.block.model.BlockPartFace; +import net.minecraft.client.renderer.block.model.FaceBakery; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ModelBlock; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.IIconCreator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; @@ -31,7 +59,11 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; public class CustomSkulls implements IResourceManagerReloadListener { private static final CustomSkulls INSTANCE = new CustomSkulls(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DamageCommas.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DamageCommas.java index 9c93b9c5..127edcde 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DamageCommas.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DamageCommas.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java index f7f9003c..c1c7dca1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/EnchantingSolvers.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/EnchantingSolvers.java index 83a68915..aaaa1e24 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/EnchantingSolvers.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/EnchantingSolvers.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -19,7 +38,11 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import org.lwjgl.input.Keyboard; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; public class EnchantingSolvers { private static SolverType currentSolver = SolverType.NONE; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FairySouls.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FairySouls.java index 39ac1b22..a3717f32 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FairySouls.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FairySouls.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.common.reflect.TypeToken; @@ -131,13 +150,14 @@ public class FairySouls { int g2 = (color2 >> 8) & 0xff; int b2 = color2 & 0xff; - int r3 = r1 + (int)Math.round(factor * (r2-r1)); - int g3 = g1 + (int)Math.round(factor * (g2-g1)); - int b3 = b1 + (int)Math.round(factor * (b2-b1)); + int r3 = r1 + (int) Math.round(factor * (r2 - r1)); + int g3 = g1 + (int) Math.round(factor * (g2 - g1)); + int b3 = b1 + (int) Math.round(factor * (b2 - b1)); return (r3 & 0xff) << 16 | (g3 & 0xff) << 8 | - (b3 & 0xff); } + (b3 & 0xff); + } private double normalize(double value, double min, double max) { return ((value - min) / (max - min)); @@ -151,7 +171,7 @@ public class FairySouls { int closeColor = 0x772991; // 0xa839ce int farColor = 0xCEB4D1; - double farSoulDistSq = lastPlayerPos.distanceSq(closestMissingSouls.get(closestMissingSouls.size()-1)); + double farSoulDistSq = lastPlayerPos.distanceSq(closestMissingSouls.get(closestMissingSouls.size() - 1)); for (BlockPos currentSoul : closestMissingSouls) { double currentDistSq = lastPlayerPos.distanceSq(currentSoul); double factor = normalize(currentDistSq, 0.0, farSoulDistSq); @@ -405,7 +425,8 @@ public class FairySouls { case "on": case "enable": if (!FairySouls.instance.trackSouls) { - print(EnumChatFormatting.RED + "Fairy soul tracking is off, enable it using /neu before using this command"); + print( + EnumChatFormatting.RED + "Fairy soul tracking is off, enable it using /neu before using this command"); return; } print(EnumChatFormatting.DARK_PURPLE + "Enabled fairy soul waypoints"); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FishingHelper.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FishingHelper.java index 65092752..26e25a11 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FishingHelper.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FishingHelper.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; 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 96522d34..f2b13abc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCustomizeManager.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCustomizeManager.java index 655364ef..e1b9d567 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCustomizeManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCustomizeManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.Gson; @@ -18,7 +37,13 @@ import org.lwjgl.opengl.GL14; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.function.Consumer; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemRarityHalo.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemRarityHalo.java index 88c7261c..79dd18f1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemRarityHalo.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemRarityHalo.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -5,7 +24,11 @@ import io.github.moulberry.notenoughupdates.util.NEUResourceManager; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; 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 b56737e7..12e0301b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NPCRetexturing.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NPCRetexturing.java index 05d75c26..ad0dd66d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NPCRetexturing.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NPCRetexturing.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java index 3419b8c4..9cc872b7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.JsonElement; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NullzeeSphere.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NullzeeSphere.java index 927111b3..6302343e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NullzeeSphere.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/NullzeeSphere.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.util.ReverseWorldRenderer; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfoOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfoOverlay.java index 056cf0a4..4cf076d8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfoOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfoOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SlotLocking.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SlotLocking.java index 9292c0d3..3955c363 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SlotLocking.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SlotLocking.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.Gson; @@ -30,7 +49,13 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.util.vector.Vector2f; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.function.Consumer; @@ -546,8 +571,8 @@ public class SlotLocking { ); } } else if (pairingSlot != null && lockKeyHeld && slot.getSlotIndex() < 8) { - int x1 = ((AccessorGuiContainer)container).getGuiLeft() + pairingSlot.xDisplayPosition; - int y1 = ((AccessorGuiContainer)container).getGuiTop() + pairingSlot.yDisplayPosition; + int x1 = ((AccessorGuiContainer) container).getGuiLeft() + pairingSlot.xDisplayPosition; + int y1 = ((AccessorGuiContainer) container).getGuiTop() + pairingSlot.yDisplayPosition; if (mouseX <= x1 || mouseX >= x1 + 16 || mouseY <= y1 || mouseY >= y1 + 16) { @@ -635,8 +660,8 @@ public class SlotLocking { int mouseX = Mouse.getX() * scaledWidth / Minecraft.getMinecraft().displayWidth; int mouseY = scaledHeight - Mouse.getY() * scaledHeight / Minecraft.getMinecraft().displayHeight - 1; - int x1 = ((AccessorGuiContainer)container).getGuiLeft() + pairingSlot.xDisplayPosition; - int y1 = ((AccessorGuiContainer)container).getGuiTop() + pairingSlot.yDisplayPosition; + int x1 = ((AccessorGuiContainer) container).getGuiLeft() + pairingSlot.xDisplayPosition; + int y1 = ((AccessorGuiContainer) container).getGuiTop() + pairingSlot.yDisplayPosition; if (mouseX <= x1 || mouseX >= x1 + 16 || mouseY <= y1 || mouseY >= y1 + 16) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StorageManager.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StorageManager.java index 94aee789..680637f2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StorageManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StorageManager.java @@ -1,6 +1,35 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; -import com.google.gson.*; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.miscgui.StorageOverlay; import io.github.moulberry.notenoughupdates.util.SBInfo; @@ -13,14 +42,32 @@ import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.*; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagByte; +import net.minecraft.nbt.NBTTagByteArray; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagDouble; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagInt; +import net.minecraft.nbt.NBTTagIntArray; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagLong; +import net.minecraft.nbt.NBTTagShort; +import net.minecraft.nbt.NBTTagString; import net.minecraft.network.play.client.C0EPacketClickWindow; import net.minecraft.network.play.server.S2DPacketOpenWindow; import net.minecraft.network.play.server.S2EPacketCloseWindow; import net.minecraft.network.play.server.S2FPacketSetSlot; import net.minecraft.network.play.server.S30PacketWindowItems; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.HashMap; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StreamerMode.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StreamerMode.java index 064f41ca..a2951e56 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StreamerMode.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/StreamerMode.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.util.Utils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SunTzu.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SunTzu.java index 27cf42ac..9c2549b8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SunTzu.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/SunTzu.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.util.Utils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CrystalHollowsTextures.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CrystalHollowsTextures.java index 36858276..7d23d922 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CrystalHollowsTextures.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CrystalHollowsTextures.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import net.minecraft.util.BlockPos; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBiomes.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBiomes.java index 9a6f9cac..48a01187 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBiomes.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBiomes.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBlockSounds.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBlockSounds.java index dec011d3..2a3e9ec4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBlockSounds.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/CustomBlockSounds.java @@ -1,8 +1,26 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import com.google.gson.Gson; import com.google.gson.JsonObject; -import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.ISound; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/DwarvenMinesTextures.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/DwarvenMinesTextures.java index faf7eabe..1c6acc1d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/DwarvenMinesTextures.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/DwarvenMinesTextures.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/IslandZoneSubdivider.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/IslandZoneSubdivider.java index 8b00bc85..75ff566f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/IslandZoneSubdivider.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/IslandZoneSubdivider.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import net.minecraft.util.BlockPos; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/LocationChangeEvent.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/LocationChangeEvent.java index c6f5e9c0..5a87af11 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/LocationChangeEvent.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/LocationChangeEvent.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import net.minecraftforge.fml.common.eventhandler.Event; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/SpecialBlockZone.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/SpecialBlockZone.java index f4e8f1fc..e88e2c25 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/SpecialBlockZone.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/customblockzones/SpecialBlockZone.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.customblockzones; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/AgeModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/AgeModifier.java index 5884512f..963fa793 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/AgeModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/AgeModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; @@ -9,22 +28,22 @@ import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.monster.EntityZombie; public class AgeModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - boolean baby = info.has("baby") && info.get("baby").getAsBoolean(); - if (base instanceof EntityAgeable) { - ((AccessorEntityAgeable) base).setGrowingAgeDirect(baby ? -1 : 1); - return base; - } - if (base instanceof EntityZombie) { - ((EntityZombie) base).setChild(baby); - return base; - } - if (base instanceof EntityArmorStand) { - ((AccessorEntityArmorStand) base).setSmallDirect(baby); - return base; - } - System.out.println("Cannot apply age to a non ageable entity: " + base); - return null; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + boolean baby = info.has("baby") && info.get("baby").getAsBoolean(); + if (base instanceof EntityAgeable) { + ((AccessorEntityAgeable) base).setGrowingAgeDirect(baby ? -1 : 1); + return base; + } + if (base instanceof EntityZombie) { + ((EntityZombie) base).setChild(baby); + return base; + } + if (base instanceof EntityArmorStand) { + ((AccessorEntityArmorStand) base).setSmallDirect(baby); + return base; + } + System.out.println("Cannot apply age to a non ageable entity: " + base); + return null; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/ChargedModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/ChargedModifier.java index 17dce66d..5f452132 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/ChargedModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/ChargedModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; @@ -6,12 +25,12 @@ import net.minecraft.entity.monster.EntityCreeper; public class ChargedModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - if (base instanceof EntityCreeper) { - base.getDataWatcher().updateObject(17, (byte) 1); - return base; - } - return null; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + if (base instanceof EntityCreeper) { + base.getDataWatcher().updateObject(17, (byte) 1); + return base; + } + return null; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java index 78d035ac..367d62d3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.Gson; @@ -14,166 +33,213 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.boss.EntityDragon; import net.minecraft.entity.boss.EntityWither; import net.minecraft.entity.item.EntityArmorStand; -import net.minecraft.entity.monster.*; -import net.minecraft.entity.passive.*; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; import net.minecraft.util.ResourceLocation; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.StreamSupport; public class EntityViewer extends GuiScreen { - public static Map> validEntities = new HashMap>() {{ - put("Zombie", () -> new EntityZombie(null)); - put("Chicken", () -> new EntityChicken(null)); - put("Slime", () -> new EntitySlime(null)); - put("Wolf", () -> new EntityWolf(null)); - put("Skeleton", () -> new EntitySkeleton(null)); - put("Creeper", () -> new EntityCreeper(null)); - put("Ocelot", () -> new EntityOcelot(null)); - put("Blaze", () -> new EntityBlaze(null)); - put("Rabbit", () -> new EntityRabbit(null)); - put("Sheep", () -> new EntitySheep(null)); - put("Horse", () -> new EntityHorse(null)); - put("Eisengolem", () -> new EntityIronGolem(null)); - put("Silverfish", () -> new EntitySilverfish(null)); - put("Witch", () -> new EntityWitch(null)); - put("Endermite", () -> new EntityEndermite(null)); - put("Snowman", () -> new EntitySnowman(null)); - put("Villager", () -> new EntityVillager(null)); - put("Guardian", () -> new EntityGuardian(null)); - put("ArmorStand", () -> new EntityArmorStand(null)); - put("Squid", () -> new EntitySquid(null)); - put("Bat", () -> new EntityBat(null)); - put("Spider", () -> new EntitySpider(null)); - put("CaveSpider", () -> new EntityCaveSpider(null)); - put("Pigman", () -> new EntityPigZombie(null)); - put("Ghast", () -> new EntityGhast(null)); - put("MagmaCube", () -> new EntityMagmaCube(null)); - put("Wither", () -> new EntityWither(null)); - put("Enderman", () -> new EntityEnderman(null)); - put("Mooshroom", ()-> new EntityMooshroom(null)); - put("WitherSkeleton", () -> { - EntitySkeleton skeleton = new EntitySkeleton(null); - skeleton.setSkeletonType(1); - return skeleton; - }); - put("Cow", () -> new EntityCow(null)); - put("Dragon", ()-> new EntityDragon(null)); - put("Player", () -> new GUIClientPlayer()); - put("Pig", () -> new EntityPig(null)); - }}; - - public static Map validModifiers = new HashMap() {{ - put("playerdata", new SkinModifier()); - put("equipment", new EquipmentModifier()); - put("riding", new RidingModifier()); - put("charged", new ChargedModifier()); - put("witherdata", new WitherModifier()); - put("invisible", new InvisibleModifier()); - put("age", new AgeModifier()); - put("horse", new HorseModifier()); - put("name", new NameModifier()); - }}; - - public int guiLeft = 0; - public int guiTop = 0; - public int xSize = 176; - public int ySize = 166; - - private final String label; - private final EntityLivingBase entity; - private static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates", "textures/gui/entity_viewer.png"); - - public EntityViewer(String label, EntityLivingBase entity) { - this.label = label; - this.entity = entity; - } - - public static EntityLivingBase constructEntity(ResourceLocation resourceLocation) { - Gson gson = NotEnoughUpdates.INSTANCE.manager.gson; - try (Reader is = new InputStreamReader( - Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation).getInputStream(), StandardCharsets.UTF_8)) { - return constructEntity(gson.fromJson(is, JsonObject.class)); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - public static EntityLivingBase constructEntity(JsonObject info) { - List modifiers = info.has("modifiers") ? - StreamSupport.stream(info.get("modifiers").getAsJsonArray().spliterator(), false) - .map(JsonElement::getAsJsonObject).collect(Collectors.toList()) - : Collections.emptyList(); - return EntityViewer.constructEntity(info.get("entity").getAsString(), modifiers); - } - - public static EntityLivingBase constructEntity(String string, String[] modifiers) { - Gson gson = NotEnoughUpdates.INSTANCE.manager.gson; - return constructEntity(string, Arrays.stream(modifiers).map(it -> gson.fromJson(it, JsonObject.class)).collect(Collectors.toList())); - } - - public static EntityLivingBase constructEntity(String string, List modifiers) { - Supplier aClass = validEntities.get(string); - if (aClass == null) { - System.err.println("Could not find entity of type: " + string); - return null; - } - try { - EntityLivingBase entity = aClass.get(); - for (JsonObject modifier : modifiers) { - String type = modifier.get("type").getAsString(); - EntityViewerModifier entityViewerModifier = validModifiers.get(type); - entity = entityViewerModifier.applyModifier(entity, modifier); - if (entity == null) break; - } - return entity; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - drawDefaultBackground(); - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; - - this.guiLeft = (width - this.xSize) / 2; - this.guiTop = (height - this.ySize) / 2; - - - Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize); - - - Utils.drawStringScaledMaxWidth(label, fontRenderer, guiLeft + 10, guiTop + 10, false, 100, 0xFF00FF); - renderEntity(entity, guiLeft + 90, guiTop + 75, mouseX, mouseY); - } - - public static void renderEntity(EntityLivingBase entity, int posX, int posY, int mouseX, int mouseY) { - GlStateManager.color(1F, 1F, 1F, 1F); - - int scale = 30; - float bottomOffset = 0F; - EntityLivingBase stack = entity; - while (true) { - - stack.ticksExisted = Minecraft.getMinecraft().thePlayer.ticksExisted; - GuiInventory.drawEntityOnScreen(posX, (int) (posY - bottomOffset * scale), scale, posX - mouseX, (int) (posY - stack.getEyeHeight() * scale - mouseY), stack); - bottomOffset += stack.getMountedYOffset(); - if (!(stack.riddenByEntity instanceof EntityLivingBase)) { - break; - } - stack = (EntityLivingBase) stack.riddenByEntity; - } - - } + public static Map> validEntities = + new HashMap>() {{ + put("Zombie", () -> new EntityZombie(null)); + put("Chicken", () -> new EntityChicken(null)); + put("Slime", () -> new EntitySlime(null)); + put("Wolf", () -> new EntityWolf(null)); + put("Skeleton", () -> new EntitySkeleton(null)); + put("Creeper", () -> new EntityCreeper(null)); + put("Ocelot", () -> new EntityOcelot(null)); + put("Blaze", () -> new EntityBlaze(null)); + put("Rabbit", () -> new EntityRabbit(null)); + put("Sheep", () -> new EntitySheep(null)); + put("Horse", () -> new EntityHorse(null)); + put("Eisengolem", () -> new EntityIronGolem(null)); + put("Silverfish", () -> new EntitySilverfish(null)); + put("Witch", () -> new EntityWitch(null)); + put("Endermite", () -> new EntityEndermite(null)); + put("Snowman", () -> new EntitySnowman(null)); + put("Villager", () -> new EntityVillager(null)); + put("Guardian", () -> new EntityGuardian(null)); + put("ArmorStand", () -> new EntityArmorStand(null)); + put("Squid", () -> new EntitySquid(null)); + put("Bat", () -> new EntityBat(null)); + put("Spider", () -> new EntitySpider(null)); + put("CaveSpider", () -> new EntityCaveSpider(null)); + put("Pigman", () -> new EntityPigZombie(null)); + put("Ghast", () -> new EntityGhast(null)); + put("MagmaCube", () -> new EntityMagmaCube(null)); + put("Wither", () -> new EntityWither(null)); + put("Enderman", () -> new EntityEnderman(null)); + put("Mooshroom", () -> new EntityMooshroom(null)); + put("WitherSkeleton", () -> { + EntitySkeleton skeleton = new EntitySkeleton(null); + skeleton.setSkeletonType(1); + return skeleton; + }); + put("Cow", () -> new EntityCow(null)); + put("Dragon", () -> new EntityDragon(null)); + put("Player", () -> new GUIClientPlayer()); + put("Pig", () -> new EntityPig(null)); + }}; + + public static Map validModifiers = new HashMap() {{ + put("playerdata", new SkinModifier()); + put("equipment", new EquipmentModifier()); + put("riding", new RidingModifier()); + put("charged", new ChargedModifier()); + put("witherdata", new WitherModifier()); + put("invisible", new InvisibleModifier()); + put("age", new AgeModifier()); + put("horse", new HorseModifier()); + put("name", new NameModifier()); + }}; + + public int guiLeft = 0; + public int guiTop = 0; + public int xSize = 176; + public int ySize = 166; + + private final String label; + private final EntityLivingBase entity; + private static final ResourceLocation BACKGROUND = new ResourceLocation( + "notenoughupdates", + "textures/gui/entity_viewer.png" + ); + + public EntityViewer(String label, EntityLivingBase entity) { + this.label = label; + this.entity = entity; + } + + public static EntityLivingBase constructEntity(ResourceLocation resourceLocation) { + Gson gson = NotEnoughUpdates.INSTANCE.manager.gson; + try ( + Reader is = new InputStreamReader( + Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation).getInputStream(), + StandardCharsets.UTF_8 + ) + ) { + return constructEntity(gson.fromJson(is, JsonObject.class)); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static EntityLivingBase constructEntity(JsonObject info) { + List modifiers = info.has("modifiers") ? + StreamSupport.stream(info.get("modifiers").getAsJsonArray().spliterator(), false) + .map(JsonElement::getAsJsonObject).collect(Collectors.toList()) + : Collections.emptyList(); + return EntityViewer.constructEntity(info.get("entity").getAsString(), modifiers); + } + + public static EntityLivingBase constructEntity(String string, String[] modifiers) { + Gson gson = NotEnoughUpdates.INSTANCE.manager.gson; + return constructEntity( + string, + Arrays.stream(modifiers).map(it -> gson.fromJson(it, JsonObject.class)).collect(Collectors.toList()) + ); + } + + public static EntityLivingBase constructEntity(String string, List modifiers) { + Supplier aClass = validEntities.get(string); + if (aClass == null) { + System.err.println("Could not find entity of type: " + string); + return null; + } + try { + EntityLivingBase entity = aClass.get(); + for (JsonObject modifier : modifiers) { + String type = modifier.get("type").getAsString(); + EntityViewerModifier entityViewerModifier = validModifiers.get(type); + entity = entityViewerModifier.applyModifier(entity, modifier); + if (entity == null) break; + } + return entity; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + drawDefaultBackground(); + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; + + this.guiLeft = (width - this.xSize) / 2; + this.guiTop = (height - this.ySize) / 2; + + Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize); + + Utils.drawStringScaledMaxWidth(label, fontRenderer, guiLeft + 10, guiTop + 10, false, 100, 0xFF00FF); + renderEntity(entity, guiLeft + 90, guiTop + 75, mouseX, mouseY); + } + + public static void renderEntity(EntityLivingBase entity, int posX, int posY, int mouseX, int mouseY) { + GlStateManager.color(1F, 1F, 1F, 1F); + + int scale = 30; + float bottomOffset = 0F; + EntityLivingBase stack = entity; + while (true) { + + stack.ticksExisted = Minecraft.getMinecraft().thePlayer.ticksExisted; + GuiInventory.drawEntityOnScreen( + posX, + (int) (posY - bottomOffset * scale), + scale, + posX - mouseX, + (int) (posY - stack.getEyeHeight() * scale - mouseY), + stack + ); + bottomOffset += stack.getMountedYOffset(); + if (!(stack.riddenByEntity instanceof EntityLivingBase)) { + break; + } + stack = (EntityLivingBase) stack.riddenByEntity; + } + + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewerModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewerModifier.java index bab6c354..aa6d22c9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewerModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewerModifier.java @@ -1,8 +1,27 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; import net.minecraft.entity.EntityLivingBase; public abstract class EntityViewerModifier { - public abstract EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info); + public abstract EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EquipmentModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EquipmentModifier.java index 3011e479..685e161a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EquipmentModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EquipmentModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java index db20a684..8cdf2ef0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.mojang.authlib.GameProfile; @@ -9,29 +28,29 @@ import net.minecraft.util.ResourceLocation; import java.util.UUID; public class GUIClientPlayer extends AbstractClientPlayer { - public GUIClientPlayer() { - super(null, new GameProfile(UUID.randomUUID(), "GuiPlayer")); - } - - ResourceLocation overrideSkin = DefaultPlayerSkin.getDefaultSkinLegacy(); - ResourceLocation overrideCape = null; - boolean overrideIsSlim = false; - NetworkPlayerInfo playerInfo = new NetworkPlayerInfo(this.getGameProfile()) { - @Override - public String getSkinType() { - return overrideIsSlim ? "slim" : "default"; - } - - @Override - public ResourceLocation getLocationSkin() { - return overrideSkin; - } - - @Override - public ResourceLocation getLocationCape() { - return overrideCape; - } - }; + public GUIClientPlayer() { + super(null, new GameProfile(UUID.randomUUID(), "GuiPlayer")); + } + + ResourceLocation overrideSkin = DefaultPlayerSkin.getDefaultSkinLegacy(); + ResourceLocation overrideCape = null; + boolean overrideIsSlim = false; + NetworkPlayerInfo playerInfo = new NetworkPlayerInfo(this.getGameProfile()) { + @Override + public String getSkinType() { + return overrideIsSlim ? "slim" : "default"; + } + + @Override + public ResourceLocation getLocationSkin() { + return overrideSkin; + } + + @Override + public ResourceLocation getLocationCape() { + return overrideCape; + } + }; @Override public String getName() { @@ -45,7 +64,7 @@ public class GUIClientPlayer extends AbstractClientPlayer { } @Override - protected NetworkPlayerInfo getPlayerInfo() { - return playerInfo; - } + protected NetworkPlayerInfo getPlayerInfo() { + return playerInfo; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/HorseModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/HorseModifier.java index 7fd2dadd..b29152bf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/HorseModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/HorseModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonElement; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/InvisibleModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/InvisibleModifier.java index c2138b3f..74535ce9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/InvisibleModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/InvisibleModifier.java @@ -1,12 +1,31 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; import net.minecraft.entity.EntityLivingBase; public class InvisibleModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - base.setInvisible(!info.has("invisible") || info.get("invisible").getAsBoolean()); - return base; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + base.setInvisible(!info.has("invisible") || info.get("invisible").getAsBoolean()); + return base; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java index 9978882d..c0fd23bd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/RidingModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/RidingModifier.java index 9879542a..72dd8b73 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/RidingModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/RidingModifier.java @@ -1,14 +1,33 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; import net.minecraft.entity.EntityLivingBase; public class RidingModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - EntityLivingBase newEntity = EntityViewer.constructEntity(info); - if (newEntity == null) return null; - newEntity.mountEntity(base); - return base; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + EntityLivingBase newEntity = EntityViewer.constructEntity(info); + if (newEntity == null) return null; + newEntity.mountEntity(base); + return base; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/SkinModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/SkinModifier.java index 55e8a432..076e8417 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/SkinModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/SkinModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonElement; @@ -9,38 +28,38 @@ import net.minecraft.util.ResourceLocation; import java.util.Map; public class SkinModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - if (base instanceof GUIClientPlayer) { - GUIClientPlayer player = (GUIClientPlayer) base; - if (info.has("cape")) { - player.overrideCape = new ResourceLocation(info.get("cape").getAsString()); - } - if (info.has("skin")) { - player.overrideSkin = new ResourceLocation(info.get("skin").getAsString()); - } - if (info.has("slim")) { - player.overrideIsSlim = info.get("slim").getAsBoolean(); - } - if (info.has("parts")) { - JsonElement parts = info.get("parts"); - byte partBitField = player.getDataWatcher().getWatchableObjectByte(10); - if (parts.isJsonPrimitive() && parts.getAsJsonPrimitive().isBoolean()) { - partBitField = parts.getAsBoolean() ? (byte) -1 : 0; - } else { - JsonObject obj = parts.getAsJsonObject(); - for (Map.Entry part : obj.entrySet()) { - EnumPlayerModelParts modelPart = EnumPlayerModelParts.valueOf(part.getKey()); - if (part.getValue().getAsBoolean()) { - partBitField |= modelPart.getPartMask(); - } else { - partBitField &= ~modelPart.getPartMask(); - } - } - } - player.getDataWatcher().updateObject(10, partBitField); - } - } - return base; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + if (base instanceof GUIClientPlayer) { + GUIClientPlayer player = (GUIClientPlayer) base; + if (info.has("cape")) { + player.overrideCape = new ResourceLocation(info.get("cape").getAsString()); + } + if (info.has("skin")) { + player.overrideSkin = new ResourceLocation(info.get("skin").getAsString()); + } + if (info.has("slim")) { + player.overrideIsSlim = info.get("slim").getAsBoolean(); + } + if (info.has("parts")) { + JsonElement parts = info.get("parts"); + byte partBitField = player.getDataWatcher().getWatchableObjectByte(10); + if (parts.isJsonPrimitive() && parts.getAsJsonPrimitive().isBoolean()) { + partBitField = parts.getAsBoolean() ? (byte) -1 : 0; + } else { + JsonObject obj = parts.getAsJsonObject(); + for (Map.Entry part : obj.entrySet()) { + EnumPlayerModelParts modelPart = EnumPlayerModelParts.valueOf(part.getKey()); + if (part.getValue().getAsBoolean()) { + partBitField |= modelPart.getPartMask(); + } else { + partBitField &= ~modelPart.getPartMask(); + } + } + } + player.getDataWatcher().updateObject(10, partBitField); + } + } + return base; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/WitherModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/WitherModifier.java index c5580f17..3b73c26f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/WitherModifier.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/WitherModifier.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; import com.google.gson.JsonObject; @@ -5,25 +24,25 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.boss.EntityWither; public class WitherModifier extends EntityViewerModifier { - @Override - public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { - if (!(base instanceof EntityWither)) - return null; - EntityWither wither = (EntityWither) base; - if (info.has("tiny")) { - if (info.get("tiny").getAsBoolean()) { - wither.setInvulTime(800); - } else { - wither.setInvulTime(0); - } - } - if (info.has("armored")) { - if (info.get("armored").getAsBoolean()) { - wither.setHealth(1); - } else { - wither.setHealth(wither.getMaxHealth()); - } - } - return base; - } + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + if (!(base instanceof EntityWither)) + return null; + EntityWither wither = (EntityWither) base; + if (info.has("tiny")) { + if (info.get("tiny").getAsBoolean()) { + wither.setInvulTime(800); + } else { + wither.setInvulTime(0); + } + } + if (info.has("armored")) { + if (info.get("armored").getAsBoolean()) { + wither.setHealth(1); + } else { + wither.setHealth(wither.getMaxHealth()); + } + } + return base; + } } 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 95e21cd0..c8fd0fde 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonArray; @@ -33,8 +52,14 @@ import org.lwjgl.opengl.GL14; import java.awt.*; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.*; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -55,7 +80,8 @@ public class AccessoryBagOverlay { Utils.createItemStack(Items.diamond_sword, EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses", 0 ), - Utils.createItemStack(Item.getItemFromBlock(Blocks.anvil), + Utils.createItemStack( + Item.getItemFromBlock(Blocks.anvil), EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses (from reforges)", 0 ), @@ -211,7 +237,8 @@ public class AccessoryBagOverlay { } } - Utils.drawStringCenteredScaledMaxWidth("# By Rarity", + Utils.drawStringCenteredScaledMaxWidth( + "# By Rarity", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -244,7 +271,8 @@ public class AccessoryBagOverlay { } } - Utils.drawStringCenteredScaledMaxWidth("Total Stats", + Utils.drawStringCenteredScaledMaxWidth( + "Total Stats", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -291,7 +319,8 @@ public class AccessoryBagOverlay { } } - Utils.drawStringCenteredScaledMaxWidth("Reforge Stats", + Utils.drawStringCenteredScaledMaxWidth( + "Reforge Stats", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -334,7 +363,8 @@ public class AccessoryBagOverlay { if (duplicates == null) { JsonObject misc = Constants.MISC; if (misc == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -346,7 +376,8 @@ public class AccessoryBagOverlay { } JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); if (talisman_upgrades_element == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -388,7 +419,8 @@ public class AccessoryBagOverlay { } } if (duplicates.isEmpty()) { - Utils.drawStringCenteredScaledMaxWidth("No Duplicates", + Utils.drawStringCenteredScaledMaxWidth( + "No Duplicates", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -397,7 +429,8 @@ public class AccessoryBagOverlay { new Color(80, 80, 80).getRGB() ); } else { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: " + duplicates.size(), + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: " + duplicates.size(), Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -432,7 +465,8 @@ public class AccessoryBagOverlay { if (missing == null) { JsonObject misc = Constants.MISC; if (misc == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -444,7 +478,8 @@ public class AccessoryBagOverlay { } JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); if (talisman_upgrades_element == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -519,7 +554,8 @@ public class AccessoryBagOverlay { } } if (missing.isEmpty()) { - Utils.drawStringCenteredScaledMaxWidth("No Missing", + Utils.drawStringCenteredScaledMaxWidth( + "No Missing", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -528,7 +564,8 @@ public class AccessoryBagOverlay { new Color(80, 80, 80).getRGB() ); } else { - Utils.drawStringCenteredScaledMaxWidth("Missing: " + missing.size(), + Utils.drawStringCenteredScaledMaxWidth( + "Missing: " + missing.size(), Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -653,7 +690,8 @@ public class AccessoryBagOverlay { private static int mainWeapon = 1; public static void renderOptimizerOverlay(int x, int y) { - Utils.drawStringCenteredScaledMaxWidth("Optimizer", + Utils.drawStringCenteredScaledMaxWidth( + "Optimizer", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, @@ -686,7 +724,8 @@ public class AccessoryBagOverlay { dark ); - Utils.drawStringCenteredScaledMaxWidth("Force 100% CC", + Utils.drawStringCenteredScaledMaxWidth( + "Force 100% CC", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 27, @@ -698,7 +737,8 @@ public class AccessoryBagOverlay { Minecraft.getMinecraft().fontRendererObj, x + 20, y + 37, true, 30, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth((forceCC ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Utils.drawStringCenteredScaledMaxWidth( + (forceCC ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 37, @@ -707,7 +747,8 @@ public class AccessoryBagOverlay { new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth("Force 100% ATKSPEED", + Utils.drawStringCenteredScaledMaxWidth( + "Force 100% ATKSPEED", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 47, @@ -715,7 +756,8 @@ public class AccessoryBagOverlay { 70, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth((forceAS ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Utils.drawStringCenteredScaledMaxWidth( + (forceAS ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", Minecraft.getMinecraft().fontRendererObj, x + 20, y + 57, @@ -723,7 +765,8 @@ public class AccessoryBagOverlay { 30, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth((forceAS ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Utils.drawStringCenteredScaledMaxWidth( + (forceAS ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 57, @@ -732,7 +775,8 @@ public class AccessoryBagOverlay { new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth("Use God Potion", + Utils.drawStringCenteredScaledMaxWidth( + "Use God Potion", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 67, @@ -740,7 +784,8 @@ public class AccessoryBagOverlay { 70, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth((useGodPot ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Utils.drawStringCenteredScaledMaxWidth( + (useGodPot ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", Minecraft.getMinecraft().fontRendererObj, x + 20, y + 77, @@ -748,7 +793,8 @@ public class AccessoryBagOverlay { 30, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth((useGodPot ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Utils.drawStringCenteredScaledMaxWidth( + (useGodPot ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 77, @@ -757,7 +803,8 @@ public class AccessoryBagOverlay { new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth("Use God Potion", + Utils.drawStringCenteredScaledMaxWidth( + "Use God Potion", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 87, @@ -774,7 +821,8 @@ public class AccessoryBagOverlay { true, 30, new Color(80, 80, 80).getRGB() ); - Utils.drawStringCenteredScaledMaxWidth("Main Weapon", + Utils.drawStringCenteredScaledMaxWidth( + "Main Weapon", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 107, @@ -836,7 +884,8 @@ public class AccessoryBagOverlay { GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen; ContainerChest cc = (ContainerChest) eventGui.inventorySlots; String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); - if (containerName.trim().startsWith("Accessory Bag") && !containerName.contains("Thaumaturgy") && !containerName.contains("Upgrades")) { + if (containerName.trim().startsWith("Accessory Bag") && !containerName.contains("Thaumaturgy") && + !containerName.contains("Upgrades")) { inAccessoryBag = true; try { int xSize = (int) Utils.getField(GuiContainer.class, eventGui, "xSize", "field_146999_f"); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java index 06cf28e1..64396905 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonArray; @@ -36,7 +55,12 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiCustomEnchant.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiCustomEnchant.java index 42340259..8ba3a98a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiCustomEnchant.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiCustomEnchant.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.collect.Lists; @@ -39,7 +58,12 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.Project; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; +import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -946,7 +970,7 @@ public class GuiCustomEnchant extends Gui { GlStateManager.pushMatrix(); GlStateManager.translate(guiLeft + 102 - 8, guiTop + 191 - (inventoryStartIndex / 9 * 18 + 89), 0); Slot slot = cc.getSlot(inventoryStartIndex + i); - ((AccessorGuiContainer)chest).doDrawSlot(slot); + ((AccessorGuiContainer) chest).doDrawSlot(slot); GlStateManager.popMatrix(); if (mouseX >= itemX && mouseX < itemX + 18 && diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiEnchantColour.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiEnchantColour.java index 2ed708e9..31713189 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiEnchantColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiEnchantColour.java @@ -1,13 +1,34 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.base.Splitter; import com.google.common.collect.Lists; -import com.google.gson.*; +import com.google.gson.JsonArray; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.core.util.lerp.LerpingInteger; import io.github.moulberry.notenoughupdates.itemeditor.GuiElementTextField; import io.github.moulberry.notenoughupdates.options.NEUConfig; -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; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiInvButtonEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiInvButtonEditor.java index d65a18b0..40e12e35 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiInvButtonEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiInvButtonEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonArray; @@ -22,7 +41,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemCustomize.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemCustomize.java index 0645ede7..7d541296 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemCustomize.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemCustomize.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemRecipe.java index 129e25e7..69343e99 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiItemRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.collect.ImmutableList; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java index d34988f6..dcb1344c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java index e2381503..ed8d5d92 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.reflect.TypeToken; @@ -17,14 +36,26 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -347,7 +378,7 @@ public class GuiPriceGraph extends GuiScreen { itemData = new ItemData( new TreeMap<>(itemData.get().entrySet().stream() .filter(e -> e.getKey() > System.currentTimeMillis() / 1000 - - (mode == 0 ? 3600 : mode == 1 ? 86400 : 604800)) + (mode == 0 ? 3600 : mode == 1 ? 86400 : 604800)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))), itemData.isBz() ); @@ -428,7 +459,12 @@ public class GuiPriceGraph extends GuiScreen { } } - private static void addOrUpdateItemPriceInfo(Map.Entry item, HashMap prices, long timestamp, boolean bazaar) { + private static void addOrUpdateItemPriceInfo( + Map.Entry item, + HashMap prices, + long timestamp, + boolean bazaar + ) { String itemName = item.getKey(); ItemData existingItemData = null; if (prices.containsKey(itemName)) { @@ -456,7 +492,8 @@ public class GuiPriceGraph extends GuiScreen { BzData bzData = new BzData( item.getValue().getAsJsonObject().get("curr_buy").getAsFloat(), - item.getValue().getAsJsonObject().get("curr_sell").getAsFloat()); + item.getValue().getAsJsonObject().get("curr_sell").getAsFloat() + ); if (existingItemData != null) { existingItemData.bz.put(timestamp, bzData); @@ -485,7 +522,8 @@ public class GuiPriceGraph extends GuiScreen { else trimmed.ah = new TreeMap<>(); int zones = NotEnoughUpdates.INSTANCE.config.ahGraph.graphZones; - Long[] dataArray = !itemData.isBz() ? itemData.ah.keySet().toArray(new Long[0]) : itemData.bz.keySet().toArray(new Long[0]); + Long[] dataArray = + !itemData.isBz() ? itemData.ah.keySet().toArray(new Long[0]) : itemData.bz.keySet().toArray(new Long[0]); int prev = 0; for (int i = 0; i < zones; i++) { long lowest = (long) map(i, 0, zones, first, last); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/InventoryStorageSelector.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/InventoryStorageSelector.java index 3932c9d5..0abf3f11 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/InventoryStorageSelector.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/InventoryStorageSelector.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/KatSitterOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/KatSitterOverlay.java index 5a763411..b22ff11f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/KatSitterOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/KatSitterOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonObject; @@ -62,12 +81,23 @@ public class KatSitterOverlay { int currentWidth = font.getStringWidth(currentText); String upgradedText = "Upgraded pet level: " + upgradedLevel; int upgradedWidth = font.getStringWidth(upgradedText); - int left = ((AccessorGuiContainer)gui).getGuiLeft() - 30 - (upgradedLevel == null ? Math.max(upgradedWidth, currentWidth) : currentWidth); + int left = ((AccessorGuiContainer) gui).getGuiLeft() - 30 - (upgradedLevel == null ? Math.max( + upgradedWidth, + currentWidth + ) : currentWidth); GlStateManager.disableLighting(); GlStateManager.color(1F, 1F, 1F, 1F); - Utils.drawStringScaled(currentText, font, left, ((AccessorGuiContainer)gui).getGuiTop() + 25, false, 0xFFD700, 1F); + Utils.drawStringScaled(currentText, font, left, ((AccessorGuiContainer) gui).getGuiTop() + 25, false, 0xFFD700, 1F); if (upgradedLevel != null) - Utils.drawStringScaled(upgradedText, font, left, ((AccessorGuiContainer)gui).getGuiTop() + 45, false, 0xFFD700, 1F); + Utils.drawStringScaled( + upgradedText, + font, + left, + ((AccessorGuiContainer) gui).getGuiTop() + 45, + false, + 0xFFD700, + 1F + ); } public String nextRarity(String currentRarity) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/NEUOverlayPlacements.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/NEUOverlayPlacements.java index f95302ef..ac96f527 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/NEUOverlayPlacements.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/NEUOverlayPlacements.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java index e5e0ff5c..98efa381 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/TradeWindow.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/TradeWindow.java index 1f47e6ee..086b6e06 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/TradeWindow.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/TradeWindow.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui; import com.google.gson.JsonObject; @@ -560,7 +579,12 @@ public class TradeWindow { int y = 104 + 18 * (index / 9); if (index < 9) y = 180; - ((AccessorGuiContainer)chest).doDrawSlot(new Slot(Minecraft.getMinecraft().thePlayer.inventory, index, guiLeft + x, guiTop + y)); + ((AccessorGuiContainer) chest).doDrawSlot(new Slot( + Minecraft.getMinecraft().thePlayer.inventory, + index, + guiLeft + x, + guiTop + y + )); int col = 0x80ffffff; if (SlotLocking.getInstance().isSlotIndexLocked(index)) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuConfigTutorial.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuConfigTutorial.java index 938f3f98..6a2602f8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuConfigTutorial.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuConfigTutorial.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui.tutorials; public class NeuConfigTutorial extends TutorialBase { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuTutorial.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuTutorial.java index 24c6bb7f..c0a5d8c8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuTutorial.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/NeuTutorial.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui.tutorials; import net.minecraft.client.Minecraft; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/TutorialBase.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/TutorialBase.java index 34167b3f..27172ed8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/TutorialBase.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/tutorials/TutorialBase.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscgui.tutorials; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityAgeable.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityAgeable.java index e41c12eb..d30cb9b3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityAgeable.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityAgeable.java @@ -1,14 +1,31 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.EntityAgeable; -import net.minecraft.inventory.Slot; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(EntityAgeable.class) public interface AccessorEntityAgeable { - @Accessor(value = "growingAge") - void setGrowingAgeDirect(int newValue); + @Accessor(value = "growingAge") + void setGrowingAgeDirect(int newValue); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityArmorStand.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityArmorStand.java index b6a3ca6e..50bbe135 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityArmorStand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorEntityArmorStand.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.item.EntityArmorStand; @@ -6,7 +25,7 @@ import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(EntityArmorStand.class) public interface AccessorEntityArmorStand { - @Invoker(value = "setSmall") - void setSmallDirect(boolean isSmall); + @Invoker(value = "setSmall") + void setSmallDirect(boolean isSmall); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiContainer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiContainer.java index 3966317b..a12cd9c8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiContainer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiContainer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.client.gui.inventory.GuiContainer; @@ -9,25 +28,25 @@ import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(GuiContainer.class) public interface AccessorGuiContainer { - @Invoker("getSlotAtPosition") - Slot doGetSlotAtPosition(int x, int y); + @Invoker("getSlotAtPosition") + Slot doGetSlotAtPosition(int x, int y); - @Invoker("drawSlot") - void doDrawSlot(Slot slot); + @Invoker("drawSlot") + void doDrawSlot(Slot slot); - @Invoker("isMouseOverSlot") - boolean doIsMouseOverSlot(Slot slot, int x, int y); + @Invoker("isMouseOverSlot") + boolean doIsMouseOverSlot(Slot slot, int x, int y); - @Accessor("guiLeft") - int getGuiLeft(); + @Accessor("guiLeft") + int getGuiLeft(); - @Accessor("guiTop") - int getGuiTop(); + @Accessor("guiTop") + int getGuiTop(); - @Accessor("xSize") - int getXSize(); + @Accessor("xSize") + int getXSize(); - @Accessor("ySize") - int getYSize(); + @Accessor("ySize") + int getYSize(); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiEditSign.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiEditSign.java index ea945d5d..d1cd7069 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiEditSign.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiEditSign.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.client.gui.inventory.GuiEditSign; @@ -7,6 +26,6 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(GuiEditSign.class) public interface AccessorGuiEditSign { - @Accessor("tileSign") - TileEntitySign getTileSign(); + @Accessor("tileSign") + TileEntitySign getTileSign(); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiPlayerTabOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiPlayerTabOverlay.java index 530e3013..0189e2fc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiPlayerTabOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorGuiPlayerTabOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.client.gui.GuiPlayerTabOverlay; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorMinecraft.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorMinecraft.java index 0277a18b..6d8c941c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorMinecraft.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/AccessorMinecraft.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.client.Minecraft; @@ -9,6 +28,6 @@ import java.util.List; @Mixin(Minecraft.class) public interface AccessorMinecraft { - @Accessor(value = "defaultResourcePacks") - List onGetDefaultResourcePacks(); + @Accessor(value = "defaultResourcePacks") + List onGetDefaultResourcePacks(); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinAbstractClientPlayer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinAbstractClientPlayer.java index 5c81c758..685528e0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinAbstractClientPlayer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinAbstractClientPlayer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.NPCRetexturing; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinContainer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinContainer.java index 80d79712..53643fb0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinContainer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinContainer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.EnchantingSolvers; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEffectRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEffectRenderer.java index 8d0b291a..451fff3a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEffectRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEffectRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntity.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntity.java index 86995647..39951ba4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntity.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntity.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.Entity; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityAgeable.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityAgeable.java index 801b9041..d9b60a13 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityAgeable.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityAgeable.java @@ -1,9 +1,27 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.EntityAgeable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityHorse.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityHorse.java index fe88922e..50eb15ba 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityHorse.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityHorse.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.passive.EntityHorse; @@ -8,10 +27,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(EntityHorse.class) public class MixinEntityHorse { - @Redirect(method = "updateHorseSlots", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;isRemote:Z")) - public boolean onUpdateHorseSlots(World instance) { - if (instance == null) - return true; - return instance.isRemote; - } + @Redirect(method = "updateHorseSlots", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;isRemote:Z")) + public boolean onUpdateHorseSlots(World instance) { + if (instance == null) + return true; + return instance.isRemote; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayer.java index 280e964e..573b2ad5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.cosmetics.CapeManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayerSP.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayerSP.java index 573eac22..765ed372 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayerSP.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityPlayerSP.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityRenderer.java index ab448660..12ff1cb4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntityRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntitySkeleton.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntitySkeleton.java index 54fe53f3..49c7ccb2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntitySkeleton.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinEntitySkeleton.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import net.minecraft.entity.monster.EntitySkeleton; @@ -8,10 +27,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(EntitySkeleton.class) public class MixinEntitySkeleton { - @Redirect(method = "setCurrentItemOrArmor", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;isRemote:Z")) - public boolean onSetCurrentItemOrArmor(World instance) { - if (instance == null) - return true; - return instance.isRemote; - } + @Redirect(method = "setCurrentItemOrArmor", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;isRemote:Z")) + public boolean onSetCurrentItemOrArmor(World instance) { + if (instance == null) + return true; + return instance.isRemote; + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiChest.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiChest.java index c0d5627d..1b6b5c61 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiChest.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiChest.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.BetterContainers; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiContainer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiContainer.java index 9f7d8528..e3741ac7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiContainer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiContainer.java @@ -1,9 +1,33 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NEUOverlay; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.listener.RenderListener; -import io.github.moulberry.notenoughupdates.miscfeatures.*; +import io.github.moulberry.notenoughupdates.miscfeatures.AuctionBINWarning; +import io.github.moulberry.notenoughupdates.miscfeatures.AuctionSortModeWarning; +import io.github.moulberry.notenoughupdates.miscfeatures.BetterContainers; +import io.github.moulberry.notenoughupdates.miscfeatures.EnchantingSolvers; +import io.github.moulberry.notenoughupdates.miscfeatures.PetInfoOverlay; +import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking; import io.github.moulberry.notenoughupdates.miscgui.GuiCustomEnchant; import io.github.moulberry.notenoughupdates.miscgui.StorageOverlay; import io.github.moulberry.notenoughupdates.util.Utils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiIngame.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiIngame.java index 7f7f25c8..3856e2d5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiIngame.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiIngame.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiInventory.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiInventory.java index 7b225d50..bd712ec7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiInventory.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiInventory.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiScreen.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiScreen.java index eac2b2d5..b978b433 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiScreen.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiScreen.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.util.SBInfo; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java index fb5707fe..dbcb260d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryPlayer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryPlayer.java index 345b5171..de117002 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryPlayer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryPlayer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemCameraTransforms.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemCameraTransforms.java index da2b2e08..bbe0f842 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemCameraTransforms.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemCameraTransforms.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.CustomSkulls; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemRenderer.java index d691b79f..c2739ad8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscgui.InventoryStorageSelector; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemStack.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemStack.java index 25109704..83379a18 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemStack.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemStack.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.ItemCustomizeManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java index a085c5d1..773e7ebe 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.core.ChromaColour; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerCustomHead.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerCustomHead.java index a2785ec7..90101696 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerCustomHead.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerCustomHead.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import com.mojang.authlib.GameProfile; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMinecraft.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMinecraft.java index 8708afd8..abc9d8c6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMinecraft.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMinecraft.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMouseHelper.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMouseHelper.java index ff71ad1e..a89893b9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMouseHelper.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinMouseHelper.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.listener.RenderListener; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java index f7baffd6..abc8c2a2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java @@ -1,13 +1,43 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; -import io.github.moulberry.notenoughupdates.miscfeatures.*; +import io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver; +import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; +import io.github.moulberry.notenoughupdates.miscfeatures.EnchantingSolvers; +import io.github.moulberry.notenoughupdates.miscfeatures.FishingHelper; +import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns; +import io.github.moulberry.notenoughupdates.miscfeatures.MiningStuff; +import io.github.moulberry.notenoughupdates.miscfeatures.StorageManager; import io.github.moulberry.notenoughupdates.util.SBInfo; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.Packet; import net.minecraft.network.play.client.C0EPacketClickWindow; -import net.minecraft.network.play.server.*; +import net.minecraft.network.play.server.S23PacketBlockChange; +import net.minecraft.network.play.server.S2DPacketOpenWindow; +import net.minecraft.network.play.server.S2EPacketCloseWindow; +import net.minecraft.network.play.server.S2FPacketSetSlot; +import net.minecraft.network.play.server.S30PacketWindowItems; +import net.minecraft.network.play.server.S47PacketPlayerListHeaderFooter; import net.minecraft.util.EnumParticleTypes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -47,7 +77,8 @@ public class MixinNetHandlerPlayClient { double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int[] params ) { - CrystalWishingCompassSolver.getInstance().onSpawnParticle(particleTypes, + CrystalWishingCompassSolver.getInstance().onSpawnParticle( + particleTypes, xCoord, yCoord, zCoord 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 b4481a73..fc8fee02 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.events.OnBlockBreakSoundEffect; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRender.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRender.java index 14aad887..db35fcb9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRender.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRender.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderFish.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderFish.java index 9e989311..ca40c5e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderFish.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderFish.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -178,4 +197,4 @@ public abstract class MixinRenderFish extends Render { private static double mathLerp(double var1, double var2, double var3) { return var2 + var1 * (var3 - var2); } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderGlobal.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderGlobal.java index fc3347bf..30c6b36e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderGlobal.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderGlobal.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.cosmetics.CapeManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java index 6c432ce3..4f193c98 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NEUOverlay; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderList.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderList.java index 8c1cc247..e7782bcd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderList.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.dungeons.DungeonBlocks; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRendererLivingEntity.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRendererLivingEntity.java index 16c6c99c..5503c8cf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRendererLivingEntity.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRendererLivingEntity.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTextureManager.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTextureManager.java index de6d1537..d8a48ecd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTextureManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTextureManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.ItemCustomizeManager; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySkullRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySkullRenderer.java index 71750fec..0b70f790 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySkullRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySkullRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import com.mojang.authlib.GameProfile; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySpecialRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySpecialRenderer.java index f93608b1..2f342614 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySpecialRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinTileEntitySpecialRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinVboRenderList.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinVboRenderList.java index 73cb19d3..22448944 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinVboRenderList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinVboRenderList.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.dungeons.DungeonBlocks; 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 86073984..b738359a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java @@ -1,8 +1,27 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.CustomBiomes; import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; +import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.CustomBiomes; import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorldClient.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorldClient.java index b20ff8fd..84e6da86 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorldClient.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorldClient.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.FishingHelper; 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 d9cc77e3..237a76ca 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java index 43c04698..17bc57e9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/customtypes/NEUDebugFlag.java b/src/main/java/io/github/moulberry/notenoughupdates/options/customtypes/NEUDebugFlag.java index 5b3188d6..8e0e4c11 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/customtypes/NEUDebugFlag.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/customtypes/NEUDebugFlag.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.customtypes; public enum NEUDebugFlag { @@ -8,5 +27,5 @@ public enum NEUDebugFlag { public static final String FLAG_LIST = "METAL - Metal Detector Solver\n" + - "WISHING - Wishing Compass Solver"; + "WISHING - Wishing Compass Solver"; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHGraph.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHGraph.java index ad96f744..ce931392 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHGraph.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHGraph.java @@ -1,7 +1,31 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import org.lwjgl.input.Keyboard; public class AHGraph { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHTweaks.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHTweaks.java index c4651b02..7c8446b0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHTweaks.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AHTweaks.java @@ -1,7 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class AHTweaks { @ConfigOption( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java index 5e1d58c1..b87db1d6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java index 6121e189..3fc72db5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java index cd2fb53f..fe593f56 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/CustomArmour.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/CustomArmour.java index edfd2276..60d8e5ef 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/CustomArmour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/CustomArmour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java index 03465db7..8e211bd6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java index d1d36e9a..1c825cdf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java @@ -1,7 +1,34 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class Dungeons { @ConfigOption( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Enchanting.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Enchanting.java index e9add7b4..7a49f7c2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Enchanting.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Enchanting.java @@ -1,7 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class Enchanting { @ConfigOption( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java index 9d1367b0..e02413f7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java index 60058280..8216c892 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java index 6826302a..685aeb98 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java index 9298623b..7cf56c96 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java @@ -1,8 +1,35 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java index db154c24..c83f370f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java @@ -1,7 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class Itemlist { @Expose diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/LocationEdit.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/LocationEdit.java index 462fbd92..42316592 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/LocationEdit.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/LocationEdit.java @@ -1,8 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class LocationEdit { @Expose diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java index 697cabf3..2f31261d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java @@ -1,8 +1,34 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java index a04a51f9..c0f4e8c9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java index 616e8188..e56da32f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java @@ -1,8 +1,33 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; @@ -166,13 +191,13 @@ public class MiscOverlays { @Expose @ConfigOption( - name = "Daily Heavy Pearl Display", - desc = "Change the way the daily heavy pearl displays\n" + - "Only when ready, When very Soon, When soon, When kinda soon or always." + name = "Daily Heavy Pearl Display", + desc = "Change the way the daily heavy pearl displays\n" + + "Only when ready, When very Soon, When soon, When kinda soon or always." ) @ConfigAccordionId(id = 1) @ConfigEditorDropdown( - values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"} + values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"} ) public int dailyHeavyPearlDisplay = 0; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java index 25efd693..44f3454a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java index bcdee28a..353cd36d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java index 9cba8202..353c4e08 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java @@ -1,8 +1,31 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java index 04fe6e6b..5d3b6532 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ProfileViewer.java @@ -1,7 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java index acdfbe54..54e17fcf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java @@ -1,8 +1,36 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import org.lwjgl.input.Keyboard; import java.util.ArrayList; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlayerOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlayerOverlay.java index 220b992b..927d00e5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlayerOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlayerOverlay.java @@ -1,8 +1,32 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; import io.github.moulberry.notenoughupdates.core.config.Position; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDraggableList; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java index c86708bb..22286808 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java @@ -1,7 +1,30 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import org.lwjgl.input.Keyboard; public class SlotLocking { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java index bdc9ee1b..e43fa5cf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java @@ -1,7 +1,34 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorColour; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorFSR; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; import org.lwjgl.input.Keyboard; public class StorageGUI { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java index 741b57e5..7d2f4fc4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java @@ -1,7 +1,32 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.*; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; public class Toolbar { @Expose diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java index 79a107b7..d1660e68 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java index d6f0808f..d2b4e0bb 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.options.seperateSections; import com.google.gson.annotations.Expose; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java index f36c0958..a493d201 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import com.google.common.base.Splitter; @@ -25,7 +44,11 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; @@ -36,7 +59,8 @@ public class AuctionSearchOverlay { private static final ResourceLocation SEARCH_OVERLAY_TEXTURE_TAB_COMPLETED = new ResourceLocation( "notenoughupdates:auc_search/ah_search_overlay_tab_completed.png"); private static final ResourceLocation STAR = new ResourceLocation("notenoughupdates:auc_search/star.png"); - private static final ResourceLocation MASTER_STAR = new ResourceLocation("notenoughupdates:auc_search/master_star.png"); + private static final ResourceLocation MASTER_STAR = + new ResourceLocation("notenoughupdates:auc_search/master_star.png"); private static final ResourceLocation STAR_BOARD = new ResourceLocation("notenoughupdates:auc_search/star_board.png"); private static final GuiElementTextField textField = new GuiElementTextField("", 200, 20, 0); @@ -135,7 +159,12 @@ public class AuctionSearchOverlay { if (selectedStars < 6) Gui.drawRect(width / 2 + 106, topY + 42, width / 2 + 115, topY + 51, 0xffffffff); if (selectedStars < 6) Gui.drawRect(width / 2 + 107, topY + 43, width / 2 + 114, topY + 50, 0xff000000); if (atLeast && selectedStars < 6) Gui.drawRect(width / 2 + 108, topY + 44, width / 2 + 113, topY + 49, 0xffffffff); - if (selectedStars < 6) Minecraft.getMinecraft().fontRendererObj.drawString("At Least?", width / 2 + 117, topY + 43, 0xffffff); + if (selectedStars < 6) Minecraft.getMinecraft().fontRendererObj.drawString( + "At Least?", + width / 2 + 117, + topY + 43, + 0xffffff + ); Minecraft.getMinecraft().fontRendererObj.drawString("Enter Query:", width / 2 - 100, topY - 10, 0xdddddd, true); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/BonemerangOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/BonemerangOverlay.java index aa8a15ce..e8447699 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/BonemerangOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/BonemerangOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -14,7 +33,11 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import org.lwjgl.util.vector.Vector3f; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.function.Supplier; public class BonemerangOverlay extends TextOverlay { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/CombatSkillOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/CombatSkillOverlay.java index 6d46dfd6..250be27d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/CombatSkillOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/CombatSkillOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -255,4 +274,4 @@ public class CombatSkillOverlay if (overlayStrings != null && overlayStrings.isEmpty()) overlayStrings = null; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/CrystalHollowOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/CrystalHollowOverlay.java index ea190323..aae5d028 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/CrystalHollowOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/CrystalHollowOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -16,7 +35,10 @@ import net.minecraft.util.EnumChatFormatting; import org.lwjgl.util.vector.Vector2f; import java.text.DecimalFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -79,11 +101,14 @@ public class CrystalHollowOverlay extends TextOverlay { Matcher hotmCrystalNotPlacedMatcher = hotmCrystalNotPlacedPattern.matcher(cleanLine); Matcher hotmCrystalNotFoundMatcher = hotmCrystalNotFoundPattern.matcher(cleanLine); Matcher hotmCrystalPlacedMatcher = hotmCrystalPlacedPattern.matcher(cleanLine); - if (hotmCrystalNotFoundMatcher.matches() && perProfileConfig.crystals.containsKey(hotmCrystalNotFoundMatcher.group("crystal"))) { + if (hotmCrystalNotFoundMatcher.matches() && + perProfileConfig.crystals.containsKey(hotmCrystalNotFoundMatcher.group("crystal"))) { perProfileConfig.crystals.put(hotmCrystalNotFoundMatcher.group("crystal"), 0); - } else if (hotmCrystalNotPlacedMatcher.matches() && perProfileConfig.crystals.containsKey(hotmCrystalNotPlacedMatcher.group("crystal"))) { + } else if (hotmCrystalNotPlacedMatcher.matches() && perProfileConfig.crystals.containsKey( + hotmCrystalNotPlacedMatcher.group("crystal"))) { perProfileConfig.crystals.put(hotmCrystalNotPlacedMatcher.group("crystal"), 1); - } else if (hotmCrystalPlacedMatcher.matches() && perProfileConfig.crystals.containsKey(hotmCrystalPlacedMatcher.group("crystal"))) { + } else if (hotmCrystalPlacedMatcher.matches() && + perProfileConfig.crystals.containsKey(hotmCrystalPlacedMatcher.group("crystal"))) { perProfileConfig.crystals.put(hotmCrystalPlacedMatcher.group("crystal"), 2); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FarmingOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FarmingOverlay.java index bbab59cb..970c74ab 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FarmingOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FarmingOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FishingSkillOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FishingSkillOverlay.java index 6f7b21d8..717ff944 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FishingSkillOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FishingSkillOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -402,4 +421,4 @@ public class FishingSkillOverlay if (overlayStrings != null && overlayStrings.isEmpty()) overlayStrings = null; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java index fa2db8b5..d180efcf 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java index 96864391..5dda0d85 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import com.google.common.collect.ComparisonChain; @@ -26,12 +45,24 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.util.vector.Vector2f; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static net.minecraft.util.EnumChatFormatting.*; +import static net.minecraft.util.EnumChatFormatting.BLUE; +import static net.minecraft.util.EnumChatFormatting.BOLD; +import static net.minecraft.util.EnumChatFormatting.DARK_AQUA; +import static net.minecraft.util.EnumChatFormatting.GOLD; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; public class MiningOverlay extends TextOverlay { public MiningOverlay( @@ -219,7 +250,7 @@ public class MiningOverlay extends TextOverlay { // Get commission and forge info even if the overlay isn't going to be rendered since it is used elsewhere //thanks to "Pure Genie#7250" for helping with this (makes tita alert and waypoints work without mine overlay) - if(SBInfo.getInstance().getLocation() == null) return; + if (SBInfo.getInstance().getLocation() == null) return; if (SBInfo.getInstance().getLocation().equals("mining_3") || SBInfo.getInstance().getLocation().equals("crystal_hollows")) { commissionProgress.clear(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningSkillOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningSkillOverlay.java index fb7cdab5..a20b1d27 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningSkillOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningSkillOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -358,4 +377,4 @@ public class MiningSkillOverlay if (overlayStrings != null && overlayStrings.isEmpty()) overlayStrings = null; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java index 8c25594e..c1a1c848 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import com.google.common.collect.Lists; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java index 9661812f..2a30f6f1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.core.GuiElementTextField; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/SlayerOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/SlayerOverlay.java index e2b22b82..00e13016 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/SlayerOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/SlayerOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -8,7 +27,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.EnumChatFormatting; import java.text.NumberFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.function.Supplier; public class SlayerOverlay extends TextOverlay { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java index 5fe066f2..f8e02fef 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.core.config.Position; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java index 4a3a2b73..2ccc3ace 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; public enum TextOverlayStyle { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java index 0454044f..5510023c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.overlays; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -805,6 +824,7 @@ public class TimersOverlay extends TextOverlay { public static int beforePearls = -1; public static int afterPearls = -1; public static int availablePearls = -1; + public static int heavyPearlCount() { int heavyPearls = 0; @@ -827,12 +847,12 @@ public class TimersOverlay extends TextOverlay { } public static void processActionBar(String msg) { - if(SBInfo.getInstance().location.equals("Belly of the Beast")) { + if (SBInfo.getInstance().location.equals("Belly of the Beast")) { try { msg = Utils.cleanColour(msg); - msg = msg.substring(msg.indexOf("Pearls Collected: ")+18); - availablePearls = Integer.parseInt(msg.substring(msg.indexOf("/")+1)); - } catch(Exception e) { + msg = msg.substring(msg.indexOf("Pearls Collected: ") + 18); + availablePearls = Integer.parseInt(msg.substring(msg.indexOf("/") + 1)); + } catch (Exception e) { e.printStackTrace(); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java index 0d03f297..dfcbb007 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.profileviewer; import com.google.gson.JsonArray; 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 ee73f66f..ba3b97f8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.profileviewer; import com.google.common.base.Splitter; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java index a2d297f5..ed7eb55d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.profileviewer; import io.github.moulberry.notenoughupdates.util.TexLoc; @@ -27,7 +46,6 @@ public class Panorama { private static int lastWidth = 0; private static int lastHeight = 0; - private static final HashMap panoramasMap = new HashMap<>(); public static synchronized ResourceLocation[] getPanoramasForLocation(String location, String identifier) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java index 6535a99a..4865830c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.profileviewer; import com.google.gson.JsonArray; @@ -247,6 +266,7 @@ public class PlayerStats { return 0; } } + private static float hotmFortune(JsonObject profile, JsonObject skillInfo) { int miningLevelFortune = (int) (4 * (float) Math.floor(Utils.getElementAsFloat(Utils.getElement(skillInfo, "level_skill_mining"), 0))); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java index 95acb7d8..5ed84b03 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.profileviewer; import com.google.gson.JsonArray; @@ -239,10 +258,13 @@ public class ProfileViewer { ); put("INK_SACK", Utils.createItemStack(Items.dye, EnumChatFormatting.AQUA + "Ink Sack")); put("SPONGE", Utils.createItemStack(Item.getItemFromBlock(Blocks.sponge), EnumChatFormatting.AQUA + "Sponge")); - put("MAGMA_FISH", - Utils.createSkull(EnumChatFormatting.AQUA + "Magmafish", - "5c53195c-5b98-3476-9731-c32647b22723", - "ewogICJ0aW1lc3RhbXAiIDogMTY0MjQ4ODA3MDY2NiwKICAicHJvZmlsZUlkIiA6ICIzNDkxZjJiOTdjMDE0MWE2OTM2YjFjMjJhMmEwMGZiNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZXNzc3N1aGgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjU2YjU5NTViMjk1NTIyYzk2ODk0ODE5NjBjMDFhOTkyY2ExYzc3NTRjZjRlZTMxM2M4ZGQwYzM1NmQzMzVmIgogICAgfQogIH0KfQ") + put( + "MAGMA_FISH", + Utils.createSkull( + EnumChatFormatting.AQUA + "Magmafish", + "5c53195c-5b98-3476-9731-c32647b22723", + "ewogICJ0aW1lc3RhbXAiIDogMTY0MjQ4ODA3MDY2NiwKICAicHJvZmlsZUlkIiA6ICIzNDkxZjJiOTdjMDE0MWE2OTM2YjFjMjJhMmEwMGZiNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZXNzc3N1aGgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjU2YjU5NTViMjk1NTIyYzk2ODk0ODE5NjBjMDFhOTkyY2ExYzc3NTRjZjRlZTMxM2M4ZGQwYzM1NmQzMzVmIgogICAgfQogIH0KfQ" + ) ); }}; private static final AtomicBoolean updatingResourceCollection = new AtomicBoolean(false); @@ -1287,7 +1309,8 @@ public class ProfileViewer { } } for (JsonObject current_member_info : coopMembers) { - if (!current_member_info.has("crafted_generators") || !current_member_info.get("crafted_generators").isJsonArray()) continue; + if (!current_member_info.has("crafted_generators") || + !current_member_info.get("crafted_generators").isJsonArray()) continue; JsonArray crafted_generators = Utils.getElement(current_member_info, "crafted_generators").getAsJsonArray(); for (int j = 0; j < crafted_generators.size(); j++) { String unlocked = crafted_generators.get(j).getAsString(); @@ -1365,7 +1388,7 @@ public class ProfileViewer { } public PlayerStats.Stats getStats(String profileId) { - if(stats.get(profileId) != null) return stats.get(profileId); + if (stats.get(profileId) != null) return stats.get(profileId); JsonObject profileInfo = getProfileInformation(profileId); if (profileInfo == null) { return null; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingOverlay.java index 45675945..004ea372 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingOverlay.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import io.github.moulberry.notenoughupdates.NEUManager; @@ -50,10 +69,10 @@ public class CraftingOverlay { ) { forEachSlot(chest, (recipeIngredient, slot) -> { if (Utils.isWithinRect( - mouseX, mouseY, - slot.xDisplayPosition + ((AccessorGuiContainer) gui).getGuiLeft(), - slot.yDisplayPosition + ((AccessorGuiContainer) gui).getGuiTop(), - 16, 16 + mouseX, mouseY, + slot.xDisplayPosition + ((AccessorGuiContainer) gui).getGuiLeft(), + slot.yDisplayPosition + ((AccessorGuiContainer) gui).getGuiTop(), + 16, 16 )) block.accept(recipeIngredient, slot); }); @@ -81,9 +100,9 @@ public class CraftingOverlay { if (currentRecipe.getCraftText() != null) { FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; fontRenderer.drawStringWithShadow( - currentRecipe.getCraftText(), - Utils.peekGuiScale().getScaledWidth() / 2f - fontRenderer.getStringWidth(currentRecipe.getCraftText()) / 2f, - ((AccessorGuiContainer) guiChest).getGuiTop() - 15f, 0x808080 + currentRecipe.getCraftText(), + Utils.peekGuiScale().getScaledWidth() / 2f - fontRenderer.getStringWidth(currentRecipe.getCraftText()) / 2f, + ((AccessorGuiContainer) guiChest).getGuiTop() - 15f, 0x808080 ); } renderTooltip(guiChest, chest); @@ -141,8 +160,8 @@ public class CraftingOverlay { } private void drawItemStack(GuiChest gui, Slot slot, ItemStack item) { - int slotX = slot.xDisplayPosition + ((AccessorGuiContainer)gui).getGuiLeft(); - int slotY = slot.yDisplayPosition + ((AccessorGuiContainer)gui).getGuiTop(); + int slotX = slot.xDisplayPosition + ((AccessorGuiContainer) gui).getGuiLeft(); + int slotY = slot.yDisplayPosition + ((AccessorGuiContainer) gui).getGuiTop(); Gui.drawRect(slotX, slotY, slotX + 16, slotY + 16, 0x64ff0000); if (item != null) Utils.drawItemStack(item, slotX, slotY); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingRecipe.java index 79f349fa..a642187b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/CraftingRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.common.collect.Sets; @@ -17,135 +36,136 @@ import java.util.Set; public class CraftingRecipe implements NeuRecipe { - public static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates","textures/gui/crafting_table_tall.png"); - - private static final int EXTRA_STRING_X = 132; - private static final int EXTRA_STRING_Y = 50; - - private final NEUManager manager; - private final Ingredient[] inputs; - private final String extraText; - private final Ingredient outputIngredient; - private List slots; - - public CraftingRecipe(NEUManager manager, Ingredient[] inputs, Ingredient output, String extra) { - this.manager = manager; - this.inputs = inputs; - this.outputIngredient = output; - this.extraText = extra; - if (inputs.length != 9) - throw new IllegalArgumentException("Cannot construct crafting recipe with non standard crafting grid size"); - } - - @Override - public Set getIngredients() { - Set ingredients = Sets.newHashSet(inputs); - ingredients.remove(null); - return ingredients; - } - - @Override - public RecipeType getType() { - return RecipeType.CRAFTING; - } - - @Override - public boolean hasVariableCost() { - return false; - } - - @Override - public Set getOutputs() { - return Collections.singleton(getOutput()); - } - - public Ingredient getOutput() { - return outputIngredient; - } - - public Ingredient[] getInputs() { - return inputs; - } - - - @Override - public List getSlots() { - if (slots != null) return slots; - slots = new ArrayList<>(); - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 3; y++) { - Ingredient input = inputs[x + y * 3]; - if (input == null) continue; - ItemStack item = input.getItemStack(); - if (item == null) continue; - slots.add(new RecipeSlot(30 + x * GuiItemRecipe.SLOT_SPACING, 48 + y * GuiItemRecipe.SLOT_SPACING, item)); - } - } - slots.add(new RecipeSlot(124, 66, outputIngredient.getItemStack())); - return slots; - } - - public String getCraftText() { - return extraText; - } - - @Override - public ResourceLocation getBackground() { - return BACKGROUND; - } - - @Override - public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; - - String craftingText = getCraftText(); - if (craftingText != null) - Utils.drawStringCenteredScaledMaxWidth(craftingText, fontRenderer, - gui.guiLeft + EXTRA_STRING_X, gui.guiTop + EXTRA_STRING_Y, false, 75, 0x404040); - } - - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - object.addProperty("type", "crafting"); - object.addProperty("count", outputIngredient.getCount()); - object.addProperty("overrideOutputId", outputIngredient.getInternalItemId()); - for (int i = 0; i < 9; i++) { - Ingredient ingredient = inputs[i]; - if (ingredient == null) continue; - String[] x = {"1", "2", "3"}; - String[] y = {"A", "B", "C"}; - String name = x[i / 3] + y[i % 3]; - object.addProperty(name, ingredient.serialize()); - } - if(extraText != null) - object.addProperty("crafttext", extraText); - return object; - } - - public static CraftingRecipe parseCraftingRecipe(NEUManager manager, JsonObject recipe, JsonObject outputItem) { - Ingredient[] craftMatrix = new Ingredient[9]; - - String[] x = {"1", "2", "3"}; - String[] y = {"A", "B", "C"}; - for (int i = 0; i < 9; i++) { - String name = y[i / 3] + x[i % 3]; - if (!recipe.has(name)) continue; - String item = recipe.get(name).getAsString(); - if (item == null || item.isEmpty()) continue; - craftMatrix[i] = new Ingredient(manager, item); - } - int resultCount = 1; - if (recipe.has("count")) - resultCount = recipe.get("count").getAsInt(); - String extra = null; - if (outputItem.has("crafttext")) - extra = outputItem.get("crafttext").getAsString(); - if (recipe.has("crafttext")) - extra = recipe.get("crafttext").getAsString(); - String outputItemId = outputItem.get("internalname").getAsString(); - if (recipe.has("overrideOutputId")) - outputItemId = recipe.get("overrideOutputId").getAsString(); - return new CraftingRecipe(manager, craftMatrix, new Ingredient(manager, outputItemId, resultCount), extra); - } + public static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates", + "textures/gui/crafting_table_tall.png"); + + private static final int EXTRA_STRING_X = 132; + private static final int EXTRA_STRING_Y = 50; + + private final NEUManager manager; + private final Ingredient[] inputs; + private final String extraText; + private final Ingredient outputIngredient; + private List slots; + + public CraftingRecipe(NEUManager manager, Ingredient[] inputs, Ingredient output, String extra) { + this.manager = manager; + this.inputs = inputs; + this.outputIngredient = output; + this.extraText = extra; + if (inputs.length != 9) + throw new IllegalArgumentException("Cannot construct crafting recipe with non standard crafting grid size"); + } + + @Override + public Set getIngredients() { + Set ingredients = Sets.newHashSet(inputs); + ingredients.remove(null); + return ingredients; + } + + @Override + public RecipeType getType() { + return RecipeType.CRAFTING; + } + + @Override + public boolean hasVariableCost() { + return false; + } + + @Override + public Set getOutputs() { + return Collections.singleton(getOutput()); + } + + public Ingredient getOutput() { + return outputIngredient; + } + + public Ingredient[] getInputs() { + return inputs; + } + + @Override + public List getSlots() { + if (slots != null) return slots; + slots = new ArrayList<>(); + for (int x = 0; x < 3; x++) { + for (int y = 0; y < 3; y++) { + Ingredient input = inputs[x + y * 3]; + if (input == null) continue; + ItemStack item = input.getItemStack(); + if (item == null) continue; + slots.add(new RecipeSlot(30 + x * GuiItemRecipe.SLOT_SPACING, 48 + y * GuiItemRecipe.SLOT_SPACING, item)); + } + } + slots.add(new RecipeSlot(124, 66, outputIngredient.getItemStack())); + return slots; + } + + public String getCraftText() { + return extraText; + } + + @Override + public ResourceLocation getBackground() { + return BACKGROUND; + } + + @Override + public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; + + String craftingText = getCraftText(); + if (craftingText != null) + Utils.drawStringCenteredScaledMaxWidth(craftingText, fontRenderer, + gui.guiLeft + EXTRA_STRING_X, gui.guiTop + EXTRA_STRING_Y, false, 75, 0x404040 + ); + } + + @Override + public JsonObject serialize() { + JsonObject object = new JsonObject(); + object.addProperty("type", "crafting"); + object.addProperty("count", outputIngredient.getCount()); + object.addProperty("overrideOutputId", outputIngredient.getInternalItemId()); + for (int i = 0; i < 9; i++) { + Ingredient ingredient = inputs[i]; + if (ingredient == null) continue; + String[] x = {"1", "2", "3"}; + String[] y = {"A", "B", "C"}; + String name = x[i / 3] + y[i % 3]; + object.addProperty(name, ingredient.serialize()); + } + if (extraText != null) + object.addProperty("crafttext", extraText); + return object; + } + + public static CraftingRecipe parseCraftingRecipe(NEUManager manager, JsonObject recipe, JsonObject outputItem) { + Ingredient[] craftMatrix = new Ingredient[9]; + + String[] x = {"1", "2", "3"}; + String[] y = {"A", "B", "C"}; + for (int i = 0; i < 9; i++) { + String name = y[i / 3] + x[i % 3]; + if (!recipe.has(name)) continue; + String item = recipe.get(name).getAsString(); + if (item == null || item.isEmpty()) continue; + craftMatrix[i] = new Ingredient(manager, item); + } + int resultCount = 1; + if (recipe.has("count")) + resultCount = recipe.get("count").getAsInt(); + String extra = null; + if (outputItem.has("crafttext")) + extra = outputItem.get("crafttext").getAsString(); + if (recipe.has("crafttext")) + extra = recipe.get("crafttext").getAsString(); + String outputItemId = outputItem.get("internalname").getAsString(); + if (recipe.has("overrideOutputId")) + outputItemId = recipe.get("overrideOutputId").getAsString(); + return new CraftingRecipe(manager, craftMatrix, new Ingredient(manager, outputItemId, resultCount), extra); + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/ForgeRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/ForgeRecipe.java index 7847b0b4..47eb0d11 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/ForgeRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/ForgeRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.common.collect.Sets; @@ -15,216 +34,256 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; public class ForgeRecipe implements NeuRecipe { - private static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates", "textures/gui/forge_recipe_tall.png"); - - private static final int SLOT_IMAGE_U = 176; - private static final int SLOT_IMAGE_V = 0; - private static final int SLOT_IMAGE_SIZE = 18; - private static final int SLOT_PADDING = 1; - private static final int EXTRA_INFO_MAX_WIDTH = 75; - public static final int EXTRA_INFO_X = 132; - public static final int EXTRA_INFO_Y = 55; - - public enum ForgeType { - REFINING, ITEM_FORGING - } - - private final NEUManager manager; - private final List inputs; - private final Ingredient output; - private final int hotmLevel; - private final int timeInSeconds; // TODO: quick forge - private List slots; - - public ForgeRecipe(NEUManager manager, List inputs, Ingredient output, int durationInSeconds, int hotmLevel) { - this.manager = manager; - this.inputs = inputs; - this.output = output; - this.hotmLevel = hotmLevel; - this.timeInSeconds = durationInSeconds; - } - - public List getInputs() { - return inputs; - } - - public Ingredient getOutput() { - return output; - } - - public int getHotmLevel() { - return hotmLevel; - } - - public int getTimeInSeconds() { - return timeInSeconds; - } - - @Override - public ResourceLocation getBackground() { - return BACKGROUND; - } - - @Override - public RecipeType getType() { - return RecipeType.FORGE; - } - - @Override - public Set getIngredients() { - return Sets.newHashSet(inputs); - } - - @Override - public boolean hasVariableCost() { - return false; - } - - @Override - public Set getOutputs() { - return Collections.singleton(output); - } - - @Override - public List getSlots() { - if (slots != null) return slots; - slots = new ArrayList<>(); - for (int i = 0; i < inputs.size(); i++) { - Ingredient input = inputs.get(i); - ItemStack itemStack = input.getItemStack(); - if (itemStack == null) continue; - int[] slotCoordinates = getSlotCoordinates(i, inputs.size()); - slots.add(new RecipeSlot(slotCoordinates[0], slotCoordinates[1], itemStack)); - } - slots.add(new RecipeSlot(124, 66, output.getItemStack())); - return slots; - } - - @Override - public void drawExtraBackground(GuiItemRecipe gui, int mouseX, int mouseY) { - Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND); - for (int i = 0; i < inputs.size(); i++) { - int[] slotCoordinates = getSlotCoordinates(i, inputs.size()); - gui.drawTexturedModalRect( - gui.guiLeft + slotCoordinates[0] - SLOT_PADDING, gui.guiTop + slotCoordinates[1] - SLOT_PADDING, - SLOT_IMAGE_U, SLOT_IMAGE_V, - SLOT_IMAGE_SIZE, SLOT_IMAGE_SIZE); - } - } - - @Override - public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; - if (timeInSeconds > 0) - Utils.drawStringCenteredScaledMaxWidth(formatDuration(timeInSeconds), fontRenderer, gui.guiLeft + EXTRA_INFO_X, gui.guiTop + EXTRA_INFO_Y, false, EXTRA_INFO_MAX_WIDTH, 0xff00ff); - } - - @Override - public void drawHoverInformation(GuiItemRecipe gui, int mouseX, int mouseY) { - manager.hotm.getInformationOnCurrentProfile().ifPresent(hotmTree -> { - if (timeInSeconds > 0 && gui.isWithinRect( - mouseX, mouseY, - gui.guiLeft + EXTRA_INFO_X - EXTRA_INFO_MAX_WIDTH / 2, - gui.guiTop + EXTRA_INFO_Y - 8, - EXTRA_INFO_MAX_WIDTH, 16 - )) { - int qf = hotmTree.getLevel("forge_time"); - int reducedTime = getReducedTime(qf); - if (qf > 0) { - - Utils.drawHoveringText(Arrays.asList(EnumChatFormatting.YELLOW + formatDuration(reducedTime) + " with Quick Forge (Level " + qf + ")"), mouseX, mouseY, gui.width, gui.height, 500, Minecraft.getMinecraft().fontRendererObj); - } - } - }); - } - - public int getReducedTime(int quickForgeUpgradeLevel) { - return HotmInformation.getQuickForgeMultiplier(quickForgeUpgradeLevel) * timeInSeconds / 1000; - } - - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - JsonArray ingredients = new JsonArray(); - for (Ingredient input : inputs) { - ingredients.add(new JsonPrimitive(input.serialize())); - } - object.addProperty("type", "forge"); - object.add("inputs", ingredients); - object.addProperty("count", output.getCount()); - object.addProperty("overrideOutputId", output.getInternalItemId()); - if (hotmLevel >= 0) - object.addProperty("hotmLevel", hotmLevel); - if (timeInSeconds >= 0) - object.addProperty("duration", timeInSeconds); - return object; - } - - static ForgeRecipe parseForgeRecipe(NEUManager manager, JsonObject recipe, JsonObject output) { - List ingredients = new ArrayList<>(); - for (JsonElement element : recipe.getAsJsonArray("inputs")) { - String ingredientString = element.getAsString(); - ingredients.add(new Ingredient(manager, ingredientString)); - } - String internalItemId = output.get("internalname").getAsString(); - if (recipe.has("overrideOutputId")) - internalItemId = recipe.get("overrideOutputId").getAsString(); - int resultCount = 1; - if (recipe.has("count")) { - resultCount = recipe.get("count").getAsInt(); - } - int duration = -1; - if (recipe.has("duration")) { - duration = recipe.get("duration").getAsInt(); - } - int hotmLevel = -1; - if (recipe.has("hotmLevel")) { - hotmLevel = recipe.get("hotmLevel").getAsInt(); - } - return new ForgeRecipe(manager, ingredients, new Ingredient(manager, internalItemId, resultCount), duration, hotmLevel); - } - - private static final int RECIPE_CENTER_X = 49; - private static final int RECIPE_CENTER_Y = 74; - private static final int SLOT_DISTANCE_FROM_CENTER = 30; - private static final int RECIPE_FALLBACK_X = 20; - private static final int RECIPE_FALLBACK_Y = 15; - - static int[] getSlotCoordinates(int slotNumber, int totalSlotCount) { - if (totalSlotCount > 8) { - return new int[]{ - RECIPE_FALLBACK_X + (slotNumber % 4) * GuiItemRecipe.SLOT_SPACING, - RECIPE_FALLBACK_Y + (slotNumber / 4) * GuiItemRecipe.SLOT_SPACING, - }; - } - if (totalSlotCount == 1) { - return new int[]{ - RECIPE_CENTER_X - GuiItemRecipe.SLOT_SIZE / 2, - RECIPE_CENTER_Y - GuiItemRecipe.SLOT_SIZE / 2 - }; - } - double rad = Math.PI * 2 * slotNumber / totalSlotCount; - int x = (int) (Math.cos(rad) * SLOT_DISTANCE_FROM_CENTER); - int y = (int) (Math.sin(rad) * SLOT_DISTANCE_FROM_CENTER); - return new int[]{RECIPE_CENTER_X + x - GuiItemRecipe.SLOT_SIZE / 2, RECIPE_CENTER_Y + y - GuiItemRecipe.SLOT_SIZE / 2}; - } - - static String formatDuration(int seconds) { - int minutes = seconds / 60; - seconds %= 60; - int hours = minutes / 60; - minutes %= 60; - int days = hours / 24; - hours %= 24; - StringBuilder sB = new StringBuilder(); - if (days != 0) sB.append(days).append("d "); - if (hours != 0) sB.append(hours).append("h "); - if (minutes != 0) sB.append(minutes).append("m "); - if (seconds != 0) sB.append(seconds).append("s "); - return sB.substring(0, sB.length() - 1); - } + private static final ResourceLocation BACKGROUND = new ResourceLocation( + "notenoughupdates", + "textures/gui/forge_recipe_tall.png" + ); + + private static final int SLOT_IMAGE_U = 176; + private static final int SLOT_IMAGE_V = 0; + private static final int SLOT_IMAGE_SIZE = 18; + private static final int SLOT_PADDING = 1; + private static final int EXTRA_INFO_MAX_WIDTH = 75; + public static final int EXTRA_INFO_X = 132; + public static final int EXTRA_INFO_Y = 55; + + public enum ForgeType { + REFINING, ITEM_FORGING + } + + private final NEUManager manager; + private final List inputs; + private final Ingredient output; + private final int hotmLevel; + private final int timeInSeconds; // TODO: quick forge + private List slots; + + public ForgeRecipe( + NEUManager manager, + List inputs, + Ingredient output, + int durationInSeconds, + int hotmLevel + ) { + this.manager = manager; + this.inputs = inputs; + this.output = output; + this.hotmLevel = hotmLevel; + this.timeInSeconds = durationInSeconds; + } + + public List getInputs() { + return inputs; + } + + public Ingredient getOutput() { + return output; + } + + public int getHotmLevel() { + return hotmLevel; + } + + public int getTimeInSeconds() { + return timeInSeconds; + } + + @Override + public ResourceLocation getBackground() { + return BACKGROUND; + } + + @Override + public RecipeType getType() { + return RecipeType.FORGE; + } + + @Override + public Set getIngredients() { + return Sets.newHashSet(inputs); + } + + @Override + public boolean hasVariableCost() { + return false; + } + + @Override + public Set getOutputs() { + return Collections.singleton(output); + } + + @Override + public List getSlots() { + if (slots != null) return slots; + slots = new ArrayList<>(); + for (int i = 0; i < inputs.size(); i++) { + Ingredient input = inputs.get(i); + ItemStack itemStack = input.getItemStack(); + if (itemStack == null) continue; + int[] slotCoordinates = getSlotCoordinates(i, inputs.size()); + slots.add(new RecipeSlot(slotCoordinates[0], slotCoordinates[1], itemStack)); + } + slots.add(new RecipeSlot(124, 66, output.getItemStack())); + return slots; + } + + @Override + public void drawExtraBackground(GuiItemRecipe gui, int mouseX, int mouseY) { + Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND); + for (int i = 0; i < inputs.size(); i++) { + int[] slotCoordinates = getSlotCoordinates(i, inputs.size()); + gui.drawTexturedModalRect( + gui.guiLeft + slotCoordinates[0] - SLOT_PADDING, gui.guiTop + slotCoordinates[1] - SLOT_PADDING, + SLOT_IMAGE_U, SLOT_IMAGE_V, + SLOT_IMAGE_SIZE, SLOT_IMAGE_SIZE + ); + } + } + + @Override + public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; + if (timeInSeconds > 0) + Utils.drawStringCenteredScaledMaxWidth( + formatDuration(timeInSeconds), + fontRenderer, + gui.guiLeft + EXTRA_INFO_X, + gui.guiTop + EXTRA_INFO_Y, + false, + EXTRA_INFO_MAX_WIDTH, + 0xff00ff + ); + } + + @Override + public void drawHoverInformation(GuiItemRecipe gui, int mouseX, int mouseY) { + manager.hotm.getInformationOnCurrentProfile().ifPresent(hotmTree -> { + if (timeInSeconds > 0 && gui.isWithinRect( + mouseX, mouseY, + gui.guiLeft + EXTRA_INFO_X - EXTRA_INFO_MAX_WIDTH / 2, + gui.guiTop + EXTRA_INFO_Y - 8, + EXTRA_INFO_MAX_WIDTH, 16 + )) { + int qf = hotmTree.getLevel("forge_time"); + int reducedTime = getReducedTime(qf); + if (qf > 0) { + + Utils.drawHoveringText( + Arrays.asList( + EnumChatFormatting.YELLOW + formatDuration(reducedTime) + " with Quick Forge (Level " + qf + ")"), + mouseX, + mouseY, + gui.width, + gui.height, + 500, + Minecraft.getMinecraft().fontRendererObj + ); + } + } + }); + } + + public int getReducedTime(int quickForgeUpgradeLevel) { + return HotmInformation.getQuickForgeMultiplier(quickForgeUpgradeLevel) * timeInSeconds / 1000; + } + + @Override + public JsonObject serialize() { + JsonObject object = new JsonObject(); + JsonArray ingredients = new JsonArray(); + for (Ingredient input : inputs) { + ingredients.add(new JsonPrimitive(input.serialize())); + } + object.addProperty("type", "forge"); + object.add("inputs", ingredients); + object.addProperty("count", output.getCount()); + object.addProperty("overrideOutputId", output.getInternalItemId()); + if (hotmLevel >= 0) + object.addProperty("hotmLevel", hotmLevel); + if (timeInSeconds >= 0) + object.addProperty("duration", timeInSeconds); + return object; + } + + static ForgeRecipe parseForgeRecipe(NEUManager manager, JsonObject recipe, JsonObject output) { + List ingredients = new ArrayList<>(); + for (JsonElement element : recipe.getAsJsonArray("inputs")) { + String ingredientString = element.getAsString(); + ingredients.add(new Ingredient(manager, ingredientString)); + } + String internalItemId = output.get("internalname").getAsString(); + if (recipe.has("overrideOutputId")) + internalItemId = recipe.get("overrideOutputId").getAsString(); + int resultCount = 1; + if (recipe.has("count")) { + resultCount = recipe.get("count").getAsInt(); + } + int duration = -1; + if (recipe.has("duration")) { + duration = recipe.get("duration").getAsInt(); + } + int hotmLevel = -1; + if (recipe.has("hotmLevel")) { + hotmLevel = recipe.get("hotmLevel").getAsInt(); + } + return new ForgeRecipe( + manager, + ingredients, + new Ingredient(manager, internalItemId, resultCount), + duration, + hotmLevel + ); + } + + private static final int RECIPE_CENTER_X = 49; + private static final int RECIPE_CENTER_Y = 74; + private static final int SLOT_DISTANCE_FROM_CENTER = 30; + private static final int RECIPE_FALLBACK_X = 20; + private static final int RECIPE_FALLBACK_Y = 15; + + static int[] getSlotCoordinates(int slotNumber, int totalSlotCount) { + if (totalSlotCount > 8) { + return new int[]{ + RECIPE_FALLBACK_X + (slotNumber % 4) * GuiItemRecipe.SLOT_SPACING, + RECIPE_FALLBACK_Y + (slotNumber / 4) * GuiItemRecipe.SLOT_SPACING, + }; + } + if (totalSlotCount == 1) { + return new int[]{ + RECIPE_CENTER_X - GuiItemRecipe.SLOT_SIZE / 2, + RECIPE_CENTER_Y - GuiItemRecipe.SLOT_SIZE / 2 + }; + } + double rad = Math.PI * 2 * slotNumber / totalSlotCount; + int x = (int) (Math.cos(rad) * SLOT_DISTANCE_FROM_CENTER); + int y = (int) (Math.sin(rad) * SLOT_DISTANCE_FROM_CENTER); + return new int[]{ + RECIPE_CENTER_X + x - GuiItemRecipe.SLOT_SIZE / 2, + RECIPE_CENTER_Y + y - GuiItemRecipe.SLOT_SIZE / 2 + }; + } + + static String formatDuration(int seconds) { + int minutes = seconds / 60; + seconds %= 60; + int hours = minutes / 60; + minutes %= 60; + int days = hours / 24; + hours %= 24; + StringBuilder sB = new StringBuilder(); + if (days != 0) sB.append(days).append("d "); + if (hours != 0) sB.append(hours).append("h "); + if (minutes != 0) sB.append(minutes).append("m "); + if (seconds != 0) sB.append(seconds).append("s "); + return sB.substring(0, sB.length() - 1); + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/Ingredient.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/Ingredient.java index c4928605..c973f8c0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/Ingredient.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/Ingredient.java @@ -1,10 +1,27 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.gson.JsonObject; import io.github.moulberry.notenoughupdates.NEUManager; import io.github.moulberry.notenoughupdates.util.ItemUtils; -import io.github.moulberry.notenoughupdates.util.Utils; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import java.util.HashMap; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/ItemShopRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/ItemShopRecipe.java index 778f156f..235ba3ce 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/ItemShopRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/ItemShopRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.common.collect.Sets; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/MobLootRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/MobLootRecipe.java index a65bfec2..0d891071 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/MobLootRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/MobLootRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.common.collect.Sets; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/NeuRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/NeuRecipe.java index 04945cc5..a0090050 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/NeuRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/NeuRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java index 3e3b06b1..d63ea42c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeSlot.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeSlot.java index 61f8ef27..489485e4 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeSlot.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeSlot.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import io.github.moulberry.notenoughupdates.miscgui.GuiItemRecipe; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeType.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeType.java index 023b20eb..de9c869f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeType.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeType.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.gson.JsonObject; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/VillagerTradeRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/VillagerTradeRecipe.java index 10eb96a5..9bb79604 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/VillagerTradeRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/VillagerTradeRecipe.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.recipes; import com.google.common.collect.Sets; @@ -17,134 +36,151 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.util.ResourceLocation; -import java.util.*; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Set; +import java.util.UUID; public class VillagerTradeRecipe implements NeuRecipe { - public static final int COST_SLOT_X = 52; - public static final int COST_SLOT_Y = 66; - public static final int RESULT_SLOT_Y = 66; - public static final int RESULT_SLOT_X = 124; - - private static class Holder { // This holder object exists to defer initialization to first access - private static final GameProfile DREAM_PROFILE = new GameProfile(UUID.fromString("ec70bcaf-702f-4bb8-b48d-276fa52a780c"), "Dream"); - private static final EntityLivingBase DEMO_DREAM = new AbstractClientPlayer(null, DREAM_PROFILE) { - @Override - protected NetworkPlayerInfo getPlayerInfo() { - return new NetworkPlayerInfo(DREAM_PROFILE) { - @Override - public ResourceLocation getLocationSkin() { - return new ResourceLocation("notenoughupdates", "dreamskin.png"); - } - }; - } - }; - private static final EntityLivingBase DEMO_VILLAGER = new EntityVillager(null); - - private static boolean isAprilFirst() { - Calendar cal = Calendar.getInstance(); - return cal.get(Calendar.DAY_OF_MONTH) == 1 && cal.get(Calendar.MONTH) == Calendar.APRIL; - } - - private static final EntityLivingBase DEMO_ENTITY = isAprilFirst() ? DEMO_DREAM : DEMO_VILLAGER; - - } - - private final static ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates", "textures/gui/villager_recipe_tall.png"); - - private final Ingredient result; - private final Ingredient cost; - private final int minCost, maxCost; - - public VillagerTradeRecipe(Ingredient result, Ingredient cost, int minCost, int maxCost) { - this.result = result; - this.cost = cost; - this.minCost = minCost; - this.maxCost = maxCost; - } - - public VillagerTradeRecipe(Ingredient result, Ingredient cost) { - this(result, cost, -1, -1); - } - - public boolean hasVariableCost() { - return minCost != -1 && maxCost != -1; - } - - @Override - public RecipeType getType() { - return RecipeType.TRADE; - } - - @Override - public Set getIngredients() { - return Sets.newHashSet(cost); - } - - @Override - public Set getOutputs() { - return Sets.newHashSet(result); - } - - @Override - public List getSlots() { - return Arrays.asList( - new RecipeSlot(COST_SLOT_X, COST_SLOT_Y, cost.getItemStack()), - new RecipeSlot(RESULT_SLOT_X, RESULT_SLOT_Y, result.getItemStack()) - ); - } - - @Override - public boolean shouldUseForCraftCost() { - return false; - } - - @Override - public boolean isAvailable() { - return SBInfo.getInstance().getCurrentMode() == SBInfo.Gamemode.STRANDED || NotEnoughUpdates.INSTANCE.config.hidden.dev; - } - - @Override - public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { - if (hasVariableCost()) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; - Utils.drawStringCenteredScaledMaxWidth( - minCost + " - " + maxCost, fontRenderer, - gui.guiLeft + 50, gui.guiTop + 90, false, 75, 0xff00ff); - - } - } - - @Override - public void drawExtraBackground(GuiItemRecipe gui, int mouseX, int mouseY) { - GuiInventory.drawEntityOnScreen(gui.guiLeft + 90, gui.guiTop + 100, 30, gui.guiLeft - mouseX + 110, gui.guiTop + 60 - mouseY, Holder.DEMO_ENTITY); - } - - @Override - public JsonObject serialize() { - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("type", "trade"); - jsonObject.addProperty("result", result.serialize()); - jsonObject.addProperty("cost", cost.serialize()); - if (minCost > 0) - jsonObject.addProperty("min", minCost); - if (maxCost > 0) - jsonObject.addProperty("max", maxCost); - return jsonObject; - } - - @Override - public ResourceLocation getBackground() { - return BACKGROUND; - } - - public static VillagerTradeRecipe parseStaticRecipe(NEUManager manager, JsonObject recipe, JsonObject result) { - return new VillagerTradeRecipe( - new Ingredient(manager, recipe.get("result").getAsString()), - new Ingredient(manager, recipe.get("cost").getAsString()), - recipe.has("min") ? recipe.get("min").getAsInt() : -1, - recipe.has("max") ? recipe.get("max").getAsInt() : -1 - ); - } + public static final int COST_SLOT_X = 52; + public static final int COST_SLOT_Y = 66; + public static final int RESULT_SLOT_Y = 66; + public static final int RESULT_SLOT_X = 124; + + private static class Holder { // This holder object exists to defer initialization to first access + private static final GameProfile DREAM_PROFILE = new GameProfile(UUID.fromString( + "ec70bcaf-702f-4bb8-b48d-276fa52a780c"), "Dream"); + private static final EntityLivingBase DEMO_DREAM = new AbstractClientPlayer(null, DREAM_PROFILE) { + @Override + protected NetworkPlayerInfo getPlayerInfo() { + return new NetworkPlayerInfo(DREAM_PROFILE) { + @Override + public ResourceLocation getLocationSkin() { + return new ResourceLocation("notenoughupdates", "dreamskin.png"); + } + }; + } + }; + private static final EntityLivingBase DEMO_VILLAGER = new EntityVillager(null); + + private static boolean isAprilFirst() { + Calendar cal = Calendar.getInstance(); + return cal.get(Calendar.DAY_OF_MONTH) == 1 && cal.get(Calendar.MONTH) == Calendar.APRIL; + } + + private static final EntityLivingBase DEMO_ENTITY = isAprilFirst() ? DEMO_DREAM : DEMO_VILLAGER; + + } + + private final static ResourceLocation BACKGROUND = new ResourceLocation( + "notenoughupdates", + "textures/gui/villager_recipe_tall.png" + ); + + private final Ingredient result; + private final Ingredient cost; + private final int minCost, maxCost; + + public VillagerTradeRecipe(Ingredient result, Ingredient cost, int minCost, int maxCost) { + this.result = result; + this.cost = cost; + this.minCost = minCost; + this.maxCost = maxCost; + } + + public VillagerTradeRecipe(Ingredient result, Ingredient cost) { + this(result, cost, -1, -1); + } + + public boolean hasVariableCost() { + return minCost != -1 && maxCost != -1; + } + + @Override + public RecipeType getType() { + return RecipeType.TRADE; + } + + @Override + public Set getIngredients() { + return Sets.newHashSet(cost); + } + + @Override + public Set getOutputs() { + return Sets.newHashSet(result); + } + + @Override + public List getSlots() { + return Arrays.asList( + new RecipeSlot(COST_SLOT_X, COST_SLOT_Y, cost.getItemStack()), + new RecipeSlot(RESULT_SLOT_X, RESULT_SLOT_Y, result.getItemStack()) + ); + } + + @Override + public boolean shouldUseForCraftCost() { + return false; + } + + @Override + public boolean isAvailable() { + return SBInfo.getInstance().getCurrentMode() == SBInfo.Gamemode.STRANDED || + NotEnoughUpdates.INSTANCE.config.hidden.dev; + } + + @Override + public void drawExtraInfo(GuiItemRecipe gui, int mouseX, int mouseY) { + if (hasVariableCost()) { + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj; + Utils.drawStringCenteredScaledMaxWidth( + minCost + " - " + maxCost, fontRenderer, + gui.guiLeft + 50, gui.guiTop + 90, false, 75, 0xff00ff + ); + + } + } + + @Override + public void drawExtraBackground(GuiItemRecipe gui, int mouseX, int mouseY) { + GuiInventory.drawEntityOnScreen( + gui.guiLeft + 90, + gui.guiTop + 100, + 30, + gui.guiLeft - mouseX + 110, + gui.guiTop + 60 - mouseY, + Holder.DEMO_ENTITY + ); + } + + @Override + public JsonObject serialize() { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("type", "trade"); + jsonObject.addProperty("result", result.serialize()); + jsonObject.addProperty("cost", cost.serialize()); + if (minCost > 0) + jsonObject.addProperty("min", minCost); + if (maxCost > 0) + jsonObject.addProperty("max", maxCost); + return jsonObject; + } + + @Override + public ResourceLocation getBackground() { + return BACKGROUND; + } + + public static VillagerTradeRecipe parseStaticRecipe(NEUManager manager, JsonObject recipe, JsonObject result) { + return new VillagerTradeRecipe( + new Ingredient(manager, recipe.get("result").getAsString()), + new Ingredient(manager, recipe.get("cost").getAsString()), + recipe.has("min") ? recipe.get("min").getAsInt() : -1, + recipe.has("max") ? recipe.get("max").getAsInt() : -1 + ); + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/AllowEmptyHTMLTag.java b/src/main/java/io/github/moulberry/notenoughupdates/util/AllowEmptyHTMLTag.java index b7fc55e4..5c223605 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/AllowEmptyHTMLTag.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/AllowEmptyHTMLTag.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import info.bliki.htmlcleaner.TagNode; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java index 4c421f3e..3230714a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Debouncer.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Debouncer.java index 15808a29..ec076a77 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Debouncer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Debouncer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; /** diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/DiscordMarkdownBuilder.java b/src/main/java/io/github/moulberry/notenoughupdates/util/DiscordMarkdownBuilder.java index 1c78f924..3c6c5f3d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/DiscordMarkdownBuilder.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/DiscordMarkdownBuilder.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; public class DiscordMarkdownBuilder { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/GuiTextures.java b/src/main/java/io/github/moulberry/notenoughupdates/util/GuiTextures.java index ba57537e..3ead5a56 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/GuiTextures.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/GuiTextures.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/HastebinUploader.java b/src/main/java/io/github/moulberry/notenoughupdates/util/HastebinUploader.java index 9cbad402..27993510 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HastebinUploader.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HastebinUploader.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java index 800c025a..5d7bfa6d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java index 937a0ab8..3e38fd2e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.gson.Gson; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/ItemUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/ItemUtils.java index 729e68bd..6abcc33d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/ItemUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/ItemUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import net.minecraft.item.ItemStack; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java index 5ee1dda1..2e2977cc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.gson.JsonArray; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java b/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java index a034fa8d..e2bfa711 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; public class LerpingFloat { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java index 827a3e97..230b8ae5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUDebugLogger.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; @@ -6,8 +25,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; -import java.util.Collections; -import java.util.EnumSet; import java.util.function.Consumer; public class NEUDebugLogger { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUResourceManager.java b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUResourceManager.java index 3ef40567..af681f2d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/NEUResourceManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/NEUResourceManager.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import net.minecraft.client.resources.IResource; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/NotificationHandler.java b/src/main/java/io/github/moulberry/notenoughupdates/util/NotificationHandler.java index 492c1dd7..c64fdb56 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/NotificationHandler.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/NotificationHandler.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/ProfileApiSyncer.java b/src/main/java/io/github/moulberry/notenoughupdates/util/ProfileApiSyncer.java index 439ad571..b90e8087 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/ProfileApiSyncer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/ProfileApiSyncer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/RequestFocusListener.java b/src/main/java/io/github/moulberry/notenoughupdates/util/RequestFocusListener.java index 3df5d9f1..092c8564 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/RequestFocusListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/RequestFocusListener.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import javax.swing.*; 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 c517bd08..634c94b6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.common.primitives.Floats; @@ -9,10 +28,13 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.logging.log4j.LogManager; -import java.nio.*; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.ShortBuffer; import java.util.Arrays; import java.util.BitSet; -import java.util.Comparator; @SideOnly(Side.CLIENT) public class ReverseWorldRenderer { @@ -564,4 +586,4 @@ public class ReverseWorldRenderer { return this.stateVertexFormat; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java index 6519d547..9419be4f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.common.reflect.TypeToken; @@ -37,7 +56,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -369,7 +393,9 @@ public class SBInfo { for (String line : lines) { if (line.contains("⏣")) { String l = Utils.cleanColour(line).replaceAll("[^A-Za-z0-9() ]", "").trim(); - if(!l.equals(location)) { new ScoreboardLocationChangeListener(location, l); } + if (!l.equals(location)) { + new ScoreboardLocationChangeListener(location, l); + } location = l; break; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SkytilsCompat.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SkytilsCompat.java index 5bc5d13c..97c11fe2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SkytilsCompat.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SkytilsCompat.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import net.minecraft.item.ItemStack; @@ -6,7 +25,6 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; - public class SkytilsCompat { // Defer static initialization private static class Holder { @@ -49,7 +67,7 @@ public class SkytilsCompat { ); isSkytilsFullyPresent = true; } catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | IllegalAccessException | - InvocationTargetException e) { + InvocationTargetException e) { System.err.println("Failed to get Skytils class even tho Skytils mod is present. This is (probably) a NEU bug"); e.printStackTrace(); } @@ -64,6 +82,7 @@ public class SkytilsCompat { public static boolean isSkytilsPresent() { return Holder.isSkytilsPresent; } + public static void renderSkytilsRarity(ItemStack stack, int x, int y) { renderSkytilsRarity(stack, x, y, false); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SpecialColour.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SpecialColour.java index 27a40565..e3318e3c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SpecialColour.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SpecialColour.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import java.awt.*; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/TexLoc.java b/src/main/java/io/github/moulberry/notenoughupdates/util/TexLoc.java index b38db88f..bcce86bb 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/TexLoc.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/TexLoc.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import org.lwjgl.input.Keyboard; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java index 4f420de1..b6447706 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.common.base.Splitter; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java index aef2490e..158f9917 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.util; import com.google.common.base.Splitter; diff --git a/src/main/resources/assets/notenoughupdates/dream.json b/src/main/resources/assets/notenoughupdates/dream.json index 6f27e89e..9dda86c6 100644 --- a/src/main/resources/assets/notenoughupdates/dream.json +++ b/src/main/resources/assets/notenoughupdates/dream.json @@ -1,49 +1,49 @@ { "entity": "Player", "modifiers": [ - { - "type": "playerdata", - "skin": "notenoughupdates:dreamskin.png" - }, - { - "type": "riding", - "entity": "ArmorStand", - "modifiers": [ - { - "type": "age", - "baby": true - }, - { - "type": "riding", - "entity": "Zombie", - "modifiers": [ - { - "type": "equipment", - "hand": "BOW", - "feet": "DIAMOND_BOOTS" - }, - { - "type": "age", - "baby": true - }, - { - "type": "riding", - "entity": "Sheep", - "modifiers": [ - { - "type": "age", - "baby": true - } - ] - } - ] - } - ] - }, - { - "type": "equipment", - "hand": "DIAMOND_SWORD", - "feet": "DIAMOND_BOOTS" - } + { + "type": "playerdata", + "skin": "notenoughupdates:dreamskin.png" + }, + { + "type": "riding", + "entity": "ArmorStand", + "modifiers": [ + { + "type": "age", + "baby": true + }, + { + "type": "riding", + "entity": "Zombie", + "modifiers": [ + { + "type": "equipment", + "hand": "BOW", + "feet": "DIAMOND_BOOTS" + }, + { + "type": "age", + "baby": true + }, + { + "type": "riding", + "entity": "Sheep", + "modifiers": [ + { + "type": "age", + "baby": true + } + ] + } + ] + } + ] + }, + { + "type": "equipment", + "hand": "DIAMOND_SWORD", + "feet": "DIAMOND_BOOTS" + } ] } diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/1.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/1.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/1.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/1.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/10.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/10.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/10.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/10.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/11.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/11.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/11.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/11.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/2.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/2.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/2.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/2.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/3.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/3.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/3.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/3.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/4.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/4.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/4.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/4.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/5.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/5.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/5.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/5.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/6.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/6.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/6.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/6.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/7.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/7.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/7.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/7.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/8.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/8.json index b2625fc5..b21bf2b8 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/8.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/8.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.21 -} \ No newline at end of file + "radiusSq": 0.21 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/9.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/9.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/9.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/large/9.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/1.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/1.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/1.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/1.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/10.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/10.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/10.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/10.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/11.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/11.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/11.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/11.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/2.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/2.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/2.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/2.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/3.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/3.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/3.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/3.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/4.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/4.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/4.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/4.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/5.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/5.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/5.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/5.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/6.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/6.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/6.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/6.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/7.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/7.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/7.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/7.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/8.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/8.json index 8c12699d..42f0d5e6 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/8.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/8.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.22 -} \ No newline at end of file + "radiusSq": 0.22 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/9.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/9.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/9.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/medium/9.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/1.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/1.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/1.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/1.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/10.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/10.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/10.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/10.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/11.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/11.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/11.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/11.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/2.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/2.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/2.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/2.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/3.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/3.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/3.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/3.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/4.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/4.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/4.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/4.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/5.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/5.json index 23e86d67..860548cf 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/5.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/5.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.25 -} \ No newline at end of file + "radiusSq": 0.25 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/6.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/6.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/6.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/6.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/7.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/7.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/7.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/7.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/8.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/8.json index 8c12699d..42f0d5e6 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/8.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/8.json @@ -1,3 +1,3 @@ { - "radiusSq": 0.22 -} \ No newline at end of file + "radiusSq": 0.22 +} diff --git a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/9.json b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/9.json index 9576ae4f..69245cb7 100644 --- a/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/9.json +++ b/src/main/resources/assets/notenoughupdates/dungeon_map/borders/small/9.json @@ -1,3 +1,3 @@ { - "radiusSq": 1 -} \ No newline at end of file + "radiusSq": 1 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json index 5b97e666..981f0029 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json @@ -1 +1,8 @@ -{"8:7":true,"9:7":true,"9:1":true,"7:8":true,"2:0":true,"8:3":true} \ No newline at end of file +{ + "8:7": true, + "9:7": true, + "9:1": true, + "7:8": true, + "2:0": true, + "8:3": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json index ec49e91c..05e5c008 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json @@ -1 +1,16 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json index 70660f8d..1763c9aa 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json @@ -1 +1,14 @@ -{"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 +{ + "1:5": true, + "0:6": true, + "0:4": true, + "1:6": [ + 177, + 178 + ], + "1:4": true, + "0:7": [ + 177, + 179 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json index 16206a50..1956eeb5 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json @@ -1 +1,36 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json index 897faaee..7f1786f9 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json @@ -1 +1,12 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json index ef35b97d..99a4c6e4 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json @@ -1 +1,31 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json index d23b3f4b..8c286333 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json @@ -1 +1,7 @@ -{"11:15":[202,203],"10:15":true} \ No newline at end of file +{ + "11:15": [ + 202, + 203 + ], + "10:15": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json index 99a12616..a794f893 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json @@ -1 +1,27 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json index 857daba9..8d8fb9d1 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json @@ -1 +1,101 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json index 31878b3e..39157aec 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json @@ -1 +1,95 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json index 35cdf158..7520ac2c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json @@ -1 +1,219 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json index 5bfc81a7..a9da93d7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json @@ -1 +1,244 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json index d6f006c3..d419dc47 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json @@ -1 +1,89 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json index 352ead0c..ed4788e9 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json @@ -1 +1,188 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json index 643d735d..3988841a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json @@ -1 +1,20 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json index b7fc8ac8..3de191fa 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json @@ -1 +1,25 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json index e79a0352..84cd9a00 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json @@ -1 +1,11 @@ -{"12:6":[203,205],"8:13":[213,214],"8:12":212} \ No newline at end of file +{ + "12:6": [ + 203, + 205 + ], + "8:13": [ + 213, + 214 + ], + "8:12": 212 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json index 4d8c42a8..99a82999 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json @@ -1 +1,23 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json index b605be36..31bc4325 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json @@ -1 +1,29 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json index 22ad94f8..dd61311b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json @@ -1 +1,85 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json index 6b724e4e..feb2ef05 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json @@ -1 +1,15 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json index 2734cb56..bd0f39ea 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json @@ -1 +1,58 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json index a52bf506..7f7300c1 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json @@ -1 +1,66 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json index aa6db439..3c099835 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json @@ -1 +1,51 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json index d3691eee..bac1f70b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json @@ -1 +1,67 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json index 4fb265b7..8aaf3ecd 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json @@ -1 +1,16 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json index e53a59df..bdceed93 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json @@ -1 +1,24 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json index 4d1cb0dc..bc37be21 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json @@ -1 +1,40 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json index 1bd9898c..6352e1c4 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json @@ -1 +1,41 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json index 7ead9273..e4e3ff1e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json @@ -1 +1,26 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json index a278b911..ce28df65 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json @@ -1 +1,108 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json index 384c6db4..5c22c130 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json @@ -1 +1,205 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json index f5fe8895..036f035b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json @@ -1 +1,172 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json index 0b2eacc6..2ddd3045 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json @@ -1 +1,86 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json index ef608932..5f8b086a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json @@ -1 +1,61 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json index 2f50b994..51e98b28 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json @@ -1 +1,59 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json index 2b5520cf..5bae7eda 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json @@ -1 +1,17 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json index 1f44a377..a6a343e8 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json @@ -1 +1,3 @@ -{"0:3":true} \ No newline at end of file +{ + "0:3": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json index 50c8d9d0..030dac50 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json @@ -1 +1,193 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json index 5a4f9d06..d5fffea6 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json @@ -1 +1,220 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json index cc177949..8522ddbe 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json @@ -1 +1,10 @@ -{"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 +{ + "0:15": true, + "0:3": 232, + "2:1": 233, + "2:2": true, + "2:4": true, + "2:3": true, + "1:3": true, + "1:2": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json index 3e21e3c3..032a1fb4 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json @@ -1 +1,48 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json index 2e8e27c8..4670975e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json @@ -1 +1,47 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json index 442b6330..81b28ef2 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json @@ -1 +1,12 @@ -{"13:0":[152,166],"13:2":[152,166],"13:3":true,"8:0":true} \ No newline at end of file +{ + "13:0": [ + 152, + 166 + ], + "13:2": [ + 152, + 166 + ], + "13:3": true, + "8:0": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json index f30eae4d..64b7be65 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json @@ -1 +1,33 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json index 1817d7ae..a4f4b826 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json @@ -1 +1,35 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json index c6a5087f..5ef00bba 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json @@ -1 +1,83 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json index ad608523..93f45ca0 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json @@ -1 +1,86 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json index 4b6bb9b4..b61ddcbe 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json @@ -1 +1,4 @@ -{"8:0":true,"12:0":true} \ No newline at end of file +{ + "8:0": true, + "12:0": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json index c8568d98..c34866aa 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json @@ -1 +1,6 @@ -{"0:0":185,"1:0":185,"0:1":186,"2:0":185} \ No newline at end of file +{ + "0:0": 185, + "1:0": 185, + "0:1": 186, + "2:0": 185 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json index 004f6226..086843da 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json @@ -1 +1,167 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json index 1174ffa7..db267e0a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json @@ -1 +1,71 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json index 19d48785..a0f17d70 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json @@ -1 +1,133 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json index 16de57fc..93cf5660 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json @@ -1 +1,4 @@ -{"14:15":true,"15:15":true} \ No newline at end of file +{ + "14:15": true, + "15:15": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json index ff34c0ae..6bf7f26c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json @@ -1 +1,36 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json index 022335ab..9c1516a2 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json @@ -1 +1,24 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json index cebe97d4..11ba2b08 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json @@ -1 +1,50 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json index e7de5fa3..879e632f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json @@ -1 +1,20 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json index 63ccec79..5e345adf 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json index fac56be4..74ee4eb5 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json @@ -1 +1,102 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json index c1c640ba..2ee90774 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json @@ -1 +1,28 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json index f21789f0..7195ab3e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json @@ -1 +1,199 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json index 94a5299b..442a1304 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json @@ -1 +1,13 @@ -{"0:2":[156,158],"0:3":true,"0:1":[157,158],"0:0":true,"0:4":true} \ No newline at end of file +{ + "0:2": [ + 156, + 158 + ], + "0:3": true, + "0:1": [ + 157, + 158 + ], + "0:0": true, + "0:4": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json index 2663a92a..b3c7f83d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json index 06368a6b..26198543 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json @@ -1 +1,37 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json index baade365..521c4837 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json @@ -1 +1,11 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json index 43d11448..93ee3533 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json @@ -1 +1,14 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json index 08674183..eeb113d8 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json @@ -1 +1,25 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json index 82769773..2df26e51 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json @@ -1 +1,15 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json index 6980d16e..059a2de6 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json @@ -1 +1,76 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json index 9f64e883..8dd2259d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json @@ -1 +1,42 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json index fe872f4b..ad2dba34 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json @@ -1 +1,56 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json index 4ba1b08a..f45f2e4f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json @@ -1 +1,53 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json index d86589b5..d3194487 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json @@ -1 +1,50 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json index 72b3a2bf..ccc6a675 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json @@ -1 +1,143 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json index 39e0ea2a..8d791b4b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json @@ -1 +1,6 @@ -{"3:0":true,"10:5":true,"5:0":true,"4:0":true} \ No newline at end of file +{ + "3:0": true, + "10:5": true, + "5:0": true, + "4:0": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json index 20dc2658..b4ec815d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json @@ -1 +1,64 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json index 1a304ed3..03400aad 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json @@ -1 +1,102 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json index 9811e723..4d3f3779 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json @@ -1 +1,58 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json index abef05f3..3bcb1c7c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json @@ -1 +1,176 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json index f2f501c9..976d30de 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json @@ -1 +1,40 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json index 3ff8084e..3c775a74 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json @@ -1 +1,10 @@ -{"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 +{ + "15:9": true, + "14:3": 152, + "13:8": 166, + "14:9": 166, + "15:10": 167, + "15:8": 166, + "13:9": 166, + "14:8": 166 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json index 6e5a9552..92a6e8ef 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json @@ -1 +1,4 @@ -{"3:10":158,"15:1":149} \ No newline at end of file +{ + "3:10": 158, + "15:1": 149 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json index 803a589b..b6239079 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json @@ -1 +1,32 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json index 3271d484..244c8eb7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json @@ -1 +1,183 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json index cee24520..0b058a28 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json @@ -1 +1,229 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json index ee4eb238..b06d77d3 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json @@ -1 +1,22 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json index d839a5ae..0bac7ab9 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json @@ -1 +1,106 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json index 998fbd6c..302a2cfe 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json @@ -1 +1,102 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json index 32fc9d93..a9d5b23b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json index f4ef8dc2..55039193 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json @@ -1 +1,35 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json index 7e4d2f51..3c4e65c8 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json @@ -1 +1,98 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json index f01a6ff5..5da29662 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json @@ -1 +1,19 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json index cba2dea8..90cca4a3 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json @@ -1 +1,141 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json index 46aeccfe..030b4d97 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json @@ -1 +1,178 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json index 303f3022..9eac7411 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json @@ -1 +1,114 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json index 645ca655..81ba0e3a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json @@ -1 +1,136 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json index c412285b..741c9bfe 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json @@ -1 +1,262 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json index e0ccf216..7d316b72 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json @@ -1 +1,256 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json index 6b55f55d..fe8dced2 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json @@ -1 +1,139 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json index a1729354..0c07f450 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json @@ -1 +1,149 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json index c16c3f4a..9505661b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json @@ -1 +1,71 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json index 87e54c02..28e49cd7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json @@ -1 +1,61 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json index 38a94887..01f4756c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json @@ -1 +1,72 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json index 19ba134e..06cf2b55 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json @@ -1 +1,36 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json index 102e124f..f8f28b67 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json @@ -1 +1,152 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json index 4574dc7f..ce03478f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json @@ -1 +1,167 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json index 3736f0b1..c1959b3c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json @@ -1 +1,100 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json index aed53373..2266b3ad 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json @@ -1 +1,122 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json index 0dc13427..f52dabff 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json @@ -1 +1,33 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json index 25cbedf1..e554d428 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json @@ -1 +1,217 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json index 0bd4fdd5..970d3fc8 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json @@ -1 +1,316 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json index cd9b9487..7ab9b6cb 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json @@ -1 +1,31 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json index e1b6709c..f9dfb020 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json @@ -1 +1,25 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json index 65b6d476..87cd0f65 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json @@ -1 +1,34 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json index aee1ef41..d984881a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json @@ -1 +1,30 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json index 50f3e00b..44379810 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json index 6dd850a8..8b25f421 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json @@ -1 +1,5 @@ -{"12:6":true,"11:6":191,"10:6":192} \ No newline at end of file +{ + "12:6": true, + "11:6": 191, + "10:6": 192 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json index 4041bf83..1c778a7d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json @@ -1 +1,61 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json index 7d15d4b4..72b5e29c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json @@ -1 +1,106 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json index 1024acf2..a1ab3fb3 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json @@ -1 +1,110 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json index a3278b89..d250466e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json @@ -1 +1,42 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json index 789747c8..232e64b6 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json @@ -1 +1,82 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json index e9b7db0b..8e06143e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json @@ -1 +1,41 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json index e47f1f03..29c4dc07 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json @@ -1 +1,31 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json index 3154cd03..d3cf2923 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json @@ -1 +1,85 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json index 575f6f03..4863ca14 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json @@ -1 +1,265 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json index 9990588f..65c19273 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json @@ -1 +1,213 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json index d31fa63e..3b14a2de 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json @@ -1 +1,20 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json index aca1f76c..3f60da15 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json @@ -1 +1,36 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json index 9a2f6ba9..84181f40 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json @@ -1 +1,31 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json index 3994b683..146a0bba 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json @@ -1 +1,23 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json index 8cf4d4b1..ead7e176 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json @@ -1 +1,49 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json index 69ff3534..2bb76172 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json @@ -1 +1,22 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json index 5d27980e..405d0278 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json @@ -1 +1,29 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json index f2607f0a..a73a600d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json @@ -1 +1,23 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json index 1ccf4ded..aee761df 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json @@ -1 +1,6 @@ -{"10:7":true,"9:7":true,"10:6":true,"10:8":true} \ No newline at end of file +{ + "10:7": true, + "9:7": true, + "10:6": true, + "10:8": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json index 4471b7ad..66948398 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json @@ -1 +1,84 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json index 771280f8..822d27e8 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json @@ -1 +1,292 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json index d412a806..dec30d93 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json @@ -1 +1,279 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json index 27bc3ed4..e59d8282 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json @@ -1 +1,74 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json index a30cb4a9..58bf1e76 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json @@ -1 +1,72 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json index 27c8872f..5c459232 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json @@ -1 +1,59 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json index c490d54b..e5302331 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json index 519dafcc..8ca05ce1 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json @@ -1 +1,31 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json index 83229162..a4dfb68b 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json @@ -1 +1,45 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json index 7dfe7b5f..bc399186 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json @@ -1 +1,52 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json index e31b7d9f..b8dde378 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json @@ -1 +1,202 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json index 9c96f830..98cae537 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json @@ -1 +1,215 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json index d59a6e28..967958bf 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json @@ -1 +1,47 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json index 44c446c1..075087ce 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json @@ -1 +1,96 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json index 0540c5c2..225a6e2d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json @@ -1 +1,72 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json index ccf6e685..b60a43f7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json @@ -1 +1,60 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json index b1c880dc..ee4dac0f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json @@ -1 +1,17 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json index 07c13c50..5f3ff028 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json @@ -1 +1,119 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json index f84a02d8..fbe1c1b7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json @@ -1 +1,36 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json index 2585400c..9499a2e1 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json @@ -1 +1,151 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json index e9baac3c..82bb1ab6 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json @@ -1 +1,89 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json index 1c619aa1..15873317 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json @@ -1 +1,90 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json index 8c280ebc..a961528d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json @@ -1 +1,7 @@ -{"13:15":true,"10:14":true,"12:15":true,"11:15":true,"10:15":true} \ No newline at end of file +{ + "13:15": true, + "10:14": true, + "12:15": true, + "11:15": true, + "10:15": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json index 84dcdb8b..646a75b5 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json @@ -1 +1,44 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json index 2b778aa2..e84aa3ad 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json @@ -1 +1,96 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json index 70315fcb..d8d42d25 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json @@ -1 +1,18 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json index ea803f53..511a2a33 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json @@ -1 +1,48 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json index 06c33ad1..9a9539b0 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json @@ -1 +1,71 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json index b7f553d7..2390fe19 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json @@ -1 +1,60 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json index 175d154e..c1e5c107 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json @@ -1 +1,40 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json index 046b2dbc..e6bb771d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json @@ -1 +1,87 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json index 59e038d9..18003fa5 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json @@ -1 +1,278 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json index 86d84cb3..e0fb583d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json @@ -1 +1,3 @@ -{"1:4":true} \ No newline at end of file +{ + "1:4": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json index 182d0153..3f26cae9 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json @@ -1 +1,145 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json index 458177bc..71567b5a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json @@ -1 +1,132 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json index 3b0bf529..2c97d46a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json @@ -1 +1,3 @@ -{"4:12":true} \ No newline at end of file +{ + "4:12": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json index 56f5e08c..706c7308 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json @@ -1 +1,103 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json index b1c8feb6..0019a44d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json @@ -1 +1,265 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json index d4457364..1935090e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json @@ -1 +1,27 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json index b6c9743e..cac50614 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json @@ -1 +1,5 @@ -{"5:12":true,"4:12":true,"3:11":true} \ No newline at end of file +{ + "5:12": true, + "4:12": true, + "3:11": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json index 5b792a9b..2bff09f0 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json @@ -1 +1,30 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json index 2cee3332..29e72fe4 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json @@ -1 +1,19 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json index 09062bf7..0cf9c03f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json @@ -1 +1,34 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json index eb9d426f..cab1d428 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json @@ -1 +1,58 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json index 0d735233..1ac48101 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json @@ -1 +1,55 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json index 051878c9..07a9fcf6 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json @@ -1 +1,47 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json index dfd5cdf8..8cde17ab 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json @@ -1 +1,22 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json index f6207f88..e99a3f13 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json @@ -1 +1,52 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json index ded0da87..2703053d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json @@ -1 +1,19 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json index e283ddec..02d5d9bb 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json @@ -1 +1,79 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json index 208d6c92..beb2731e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json @@ -1 +1,16 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json index 24c0a054..57fcf162 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json @@ -1 +1,49 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json index eb8125af..520d0e1f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json @@ -1 +1,8 @@ -{"15:7":true,"14:7":true,"3:15":true,"0:4":212,"2:15":true,"12:12":true} \ No newline at end of file +{ + "15:7": true, + "14:7": true, + "3:15": true, + "0:4": 212, + "2:15": true, + "12:12": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json index e604dcb9..76bfe654 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json @@ -1 +1,69 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json index a4276076..ded6312e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json @@ -1 +1,4 @@ -{"0:12":true,"1:12":true} \ No newline at end of file +{ + "0:12": true, + "1:12": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json index f9d3a234..2e59477c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json @@ -1 +1,129 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json index 5dd48953..b283ecd9 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json @@ -1 +1,61 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json index 07d74c09..5abb4b54 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json @@ -1 +1,7 @@ -{"9:12":210,"8:15":[205,206]} \ No newline at end of file +{ + "9:12": 210, + "8:15": [ + 205, + 206 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json index 9d96fa2f..81d36f69 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json @@ -1 +1,8 @@ -{"15:4":217,"15:5":216,"15:3":218,"15:6":true,"15:8":true,"15:7":true} \ No newline at end of file +{ + "15:4": 217, + "15:5": 216, + "15:3": 218, + "15:6": true, + "15:8": true, + "15:7": true +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json index 7854cd61..b18293dd 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json @@ -1 +1,102 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json index 53a6fea3..cfa532fa 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json @@ -1 +1,10 @@ -{"1:1":true,"7:3":198,"6:3":[196,197],"13:14":193,"5:3":196} \ No newline at end of file +{ + "1:1": true, + "7:3": 198, + "6:3": [ + 196, + 197 + ], + "13:14": 193, + "5:3": 196 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json index deaaa360..c87f7fa3 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json @@ -1 +1,161 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json index 85efb804..14670145 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json @@ -1 +1,227 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json index 0a576965..e6c41903 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json @@ -1 +1,157 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json index cd6ee4fd..da6f35d7 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json @@ -1 +1,197 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json index ea179d82..9afd8d50 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json @@ -1 +1,12 @@ -{"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 +{ + "10:14": [ + 203, + 205 + ], + "13:15": true, + "14:15": 204, + "12:14": 222, + "12:15": true, + "5:13": 208, + "4:13": 208 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json index 57d53e17..138ea888 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json @@ -1 +1,65 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json index 106e74e5..66594b9d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json @@ -1 +1,233 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json index 0c4de502..17a53bab 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json @@ -1 +1,184 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json index bb5f8edd..c20fc48e 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json @@ -1 +1,236 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json index 5df021c3..e318a13a 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json @@ -1 +1,303 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json index 23298771..efbef311 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json @@ -1 +1,298 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json index 96e0e727..beb62e5f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json @@ -1 +1,4 @@ -{"12:1":true,"9:0":233} \ No newline at end of file +{ + "12:1": true, + "9:0": 233 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json index 3200d788..471796ed 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json @@ -1 +1,22 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json index 5d043173..3e1ceb41 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json @@ -1 +1,28 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json index eda3d134..91d97e1c 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json @@ -1 +1,24 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json index f0ae8c33..984bdc75 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json @@ -1 +1,115 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json index 98887d05..daccb954 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json @@ -1 +1,66 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json index c58be254..8dfb29e5 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json @@ -1 +1,135 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json index c3b7ea88..9c649007 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json @@ -1 +1,122 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json index 106d07c3..898cca1f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json @@ -1 +1,120 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json index 6b6caa51..54740b3d 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json @@ -1 +1,179 @@ -{"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 +{ + "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 + ] +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json index e6dc6263..4a306305 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json @@ -1 +1,29 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json index 3dbb3534..613e25ff 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json @@ -1 +1,50 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json index da92c247..a4650235 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json @@ -1 +1,21 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json index 4b3610ad..917a084f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json @@ -1 +1,144 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json index 4887712a..979a9b2f 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json @@ -1 +1,35 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json index c4fd1b66..f957a1ba 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json @@ -1 +1,280 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json index c7c85d2d..77777607 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json @@ -1 +1,217 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json index 51fce837..03686205 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json @@ -1 +1,253 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json index fab5a1e8..1cad6220 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json @@ -1 +1,129 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/all.json b/src/main/resources/assets/notenoughupdates/dwarven_data/all.json index 18d6bee9..a0831fbf 100644 --- a/src/main/resources/assets/notenoughupdates/dwarven_data/all.json +++ b/src/main/resources/assets/notenoughupdates/dwarven_data/all.json @@ -1 +1,206 @@ -{"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 +{ + "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 +} diff --git a/src/main/resources/assets/notenoughupdates/dynamic_54/style1/dynamic_config.json b/src/main/resources/assets/notenoughupdates/dynamic_54/style1/dynamic_config.json index 05dbf61a..43135433 100644 --- a/src/main/resources/assets/notenoughupdates/dynamic_54/style1/dynamic_config.json +++ b/src/main/resources/assets/notenoughupdates/dynamic_54/style1/dynamic_config.json @@ -1,3 +1,3 @@ { - "text-colour": "FF000000" -} \ No newline at end of file + "text-colour": "FF000000" +} diff --git a/src/main/resources/assets/notenoughupdates/dynamic_54/style2/dynamic_config.json b/src/main/resources/assets/notenoughupdates/dynamic_54/style2/dynamic_config.json index 05dbf61a..43135433 100644 --- a/src/main/resources/assets/notenoughupdates/dynamic_54/style2/dynamic_config.json +++ b/src/main/resources/assets/notenoughupdates/dynamic_54/style2/dynamic_config.json @@ -1,3 +1,3 @@ { - "text-colour": "FF000000" -} \ No newline at end of file + "text-colour": "FF000000" +} diff --git a/src/main/resources/assets/notenoughupdates/dynamic_54/style3/dynamic_config.json b/src/main/resources/assets/notenoughupdates/dynamic_54/style3/dynamic_config.json index 5ae75066..11b64060 100644 --- a/src/main/resources/assets/notenoughupdates/dynamic_54/style3/dynamic_config.json +++ b/src/main/resources/assets/notenoughupdates/dynamic_54/style3/dynamic_config.json @@ -1,3 +1,3 @@ { - "text-colour": "FFC8C8C8" -} \ No newline at end of file + "text-colour": "FFC8C8C8" +} diff --git a/src/main/resources/assets/notenoughupdates/invbuttons/extraicons.json b/src/main/resources/assets/notenoughupdates/invbuttons/extraicons.json index 5a99f3f0..d4e501c4 100644 --- a/src/main/resources/assets/notenoughupdates/invbuttons/extraicons.json +++ b/src/main/resources/assets/notenoughupdates/invbuttons/extraicons.json @@ -1,18 +1,18 @@ { - "baubles ring": "baubles", - "baubles gold ring": "baubles_gold", - "cross x": "cross", - "green check mark": "green_check", - "white check mark": "white_check", - "question mark help": "question", - "settings cog config": "settings", - "accessory ring": "accessory", - "accessory ring gold": "accessory_gold", - "armor chestplate": "armor", - "armor gold chestplate": "armor_gold", - "pet cat": "pet", - "pet cat gold": "pet_gold", - "skyblock menu": "skyblock_menu", - "recipe book": "recipe", - "search glass": "search" -} \ No newline at end of file + "baubles ring": "baubles", + "baubles gold ring": "baubles_gold", + "cross x": "cross", + "green check mark": "green_check", + "white check mark": "white_check", + "question mark help": "question", + "settings cog config": "settings", + "accessory ring": "accessory", + "accessory ring gold": "accessory_gold", + "armor chestplate": "armor", + "armor gold chestplate": "armor_gold", + "pet cat": "pet", + "pet cat gold": "pet_gold", + "skyblock menu": "skyblock_menu", + "recipe book": "recipe", + "search glass": "search" +} diff --git a/src/main/resources/assets/notenoughupdates/invbuttons/presets.json b/src/main/resources/assets/notenoughupdates/invbuttons/presets.json index d3065f30..4de328ae 100644 --- a/src/main/resources/assets/notenoughupdates/invbuttons/presets.json +++ b/src/main/resources/assets/notenoughupdates/invbuttons/presets.json @@ -1,2739 +1,2739 @@ { - "Empty":[ - { - "x":87, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":108, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":129, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":150, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":87, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":108, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":129, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":150, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":87, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":105, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":87, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":105, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":143, - "y":35, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":60, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":60, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":2, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":22, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":42, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":62, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-84, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-64, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":2, - "y":-44, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-24, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":22, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":42, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":62, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-84, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-64, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-44, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-24, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - } - ], - "Empty (Dark)":[ - { - "x":87, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":108, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":129, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":150, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":87, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":108, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":129, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":150, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":87, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":105, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":87, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":105, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":143, - "y":35, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":60, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":60, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":26, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":26, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":2, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":22, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":42, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":62, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":-84, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":-64, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":1, - "command":"", - "icon":"" - }, - { - "x":2, - "y":-44, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":2, - "y":-24, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":4, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":25, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":46, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":67, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":88, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":109, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":130, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":151, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":22, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":42, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":62, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":-84, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":-64, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":-44, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":-19, - "y":-24, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":4, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":25, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":46, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":67, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":88, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":109, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":130, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - }, - { - "x":151, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":1, - "command":"" - } - ], - "Simple":[ - { - "x":87, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/warp home", - "icon":"skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" - }, - { - "x":108, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/warp hub", - "icon":"skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" - }, - { - "x":129, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/enderchest", - "icon":"ENDER_CHEST" - }, - { - "x":150, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/pets", - "icon":"extra:pet_gold" - }, - { - "x":87, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":108, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":129, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":150, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":87, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":105, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":87, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":105, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":143, - "y":35, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":60, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":2, - "command":"/wardrobe", - "icon":"extra:baubles_gold" - }, - { - "x":60, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":2, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":22, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":42, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":62, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-84, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-64, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"", - "icon":"BONE" - }, - { - "x":2, - "y":-44, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-24, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":22, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":42, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":62, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-84, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-64, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-44, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-24, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - } - ], - "All Warps":[ - { - "x": 87, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "pets", - "icon": "extra:pet_gold" - }, - { - "x": 108, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "/wardrobe", - "icon": "extra:armor" - }, - { - "x": 129, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "/enderchest", - "icon": "ENDER_CHEST" - }, - { - "x": 150, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "hotm", - "icon": "skull:86f06eaa3004aeed09b3d5b45d976de584e691c0e9cade133635de93d23b9edb" - }, - { - "x": 87, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "", - "icon": "GOLD_BLOCK" - }, - { - "x": 108, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 129, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 150, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "/pv", - "icon": "PAINTING" - }, - { - "x": 87, - "y": 25, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 105, - "y": 25, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 87, - "y": 43, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 105, - "y": 43, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 143, - "y": 35, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 60, - "y": 8, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "", - "icon": "extra:baubles_gold" - }, - { - "x": 60, - "y": 60, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 26, - "y": 8, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 26, - "y": 60, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 2, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "/ah", - "icon": "GOLD_BLOCK" - }, - { - "x": 2, - "y": 22, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "/bz", - "icon": "GOLD_BARDING" - }, - { - "x": 2, - "y": 42, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 62, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "warp museum", - "icon": "skull:438cf3f8e54afc3b3f91d20a49f324dca1486007fe545399055524c17941f4dc" - }, - { - "x": 2, - "y": -84, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp home", - "icon": "skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" - }, - { - "x": 2, - "y": -64, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp hub", - "icon": "skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" - }, - { - "x": 2, - "y": -44, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp dungeon_hub", - "icon": "skull:9b56895b9659896ad647f58599238af532d46db9c1b0389b8bbeb70999dab33d" - }, - { - "x": 2, - "y": -24, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp end", - "icon": "skull:7840b87d52271d2a755dedc82877e0ed3df67dcc42ea479ec146176b02779a5" - }, - { - "x": 4, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 25, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 46, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 67, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 88, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 109, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 130, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 151, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": 22, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": 42, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": 62, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": -84, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": -64, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": -44, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "warp barn", - "icon": "skull:4d3a6bd98ac1833c664c4909ff8d2dc62ce887bdcf3cc5b3848651ae5af6b" - }, - { - "x": -19, - "y": -24, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "warp desert", - "icon": "skull:51539dddf9ed255ece6348193cd75012c82c93aec381f05572cecf7379711b3b" - }, - { - "x": 4, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp gold", - "icon": "skull:73bc965d579c3c6039f0a17eb7c2e6faf538c7a5de8e60ec7a719360d0a857a9" - }, - { - "x": 25, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp deep", - "icon": "skull:569a1f114151b4521373f34bc14c2963a5011cdc25a6554c48c708cd96ebfc" - }, - { - "x": 46, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp crystals", - "icon": "skull:21dbe30b027acbceb612563bd877cd7ebb719ea6ed1399027dcee58bb9049d4a" - }, - { - "x": 67, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp forge", - "icon": "skull:5cbd9f5ec1ed007259996491e69ff649a3106cf920227b1bb3a71ee7a89863f" - }, - { - "x": 88, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp mines", - "icon": "skull:6b20b23c1aa2be0270f016b4c90d6ee6b8330a17cfef87869d6ad60b2ffbf3b5" - }, - { - "x": 109, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp park", - "icon": "skull:a221f813dacee0fef8c59f76894dbb26415478d9ddfc44c2e708a6d3b7549b" - }, - { - "x": 130, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp spider", - "icon": "skull:9d7e3b19ac4f3dee9c5677c135333b9d35a7f568b63d1ef4ada4b068b5a25" - }, - { - "x": 151, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/warp nether", - "icon": "skull:c3687e25c632bce8aa61e0d64c24e694c3eea629ea944f4cf30dcfb4fbce071" - } - ], - "More Buttons":[ - { - "x":87, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/sbmenu", - "icon":"SKYBLOCK_MENU" - }, - { - "x":108, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"enderchest", - "icon":"ENDER_CHEST" - }, - { - "x":129, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"pets", - "icon":"BONE" - }, - { - "x":150, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"effects", - "icon":"POTION" - }, - { - "x":87, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/recipes", - "icon":"extra:recipe" - }, - { - "x":108, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/collections", - "icon":"PAINTING" - }, - { - "x":129, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/scg", - "icon":"BOOK" - }, - { - "x":150, - "y":5, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/calendar", - "icon":"BOOK_AND_QUILL" - }, - { - "x":87, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"CHEST" - }, - { - "x":105, - "y":25, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":87, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":105, - "y":43, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":143, - "y":35, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"craft", - "icon":"WORKBENCH" - }, - { - "x":60, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":2, - "command":"/wardrobe", - "icon":"extra:baubles_gold" - }, - { - "x":60, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":8, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":26, - "y":60, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":2, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/warp hub", - "icon":"skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" - }, - { - "x":2, - "y":22, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/warp home", - "icon":"skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" - }, - { - "x":2, - "y":42, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":62, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-84, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x":2, - "y":-64, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"", - "icon":"BONE" - }, - { - "x":2, - "y":-44, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":2, - "y":-24, - "playerInvOnly":false, - "anchorRight":true, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":-19, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/ah", - "icon":"GOLD_BLOCK" - }, - { - "x":-19, - "y":22, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"/bz", - "icon":"GOLD_BARDING" - }, - { - "x":-19, - "y":42, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":62, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-84, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-64, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-44, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":-19, - "y":-24, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":4, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":25, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":46, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":67, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":88, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":109, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":130, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - }, - { - "x":151, - "y":2, - "playerInvOnly":false, - "anchorRight":false, - "anchorBottom":true, - "backgroundIndex":0, - "command":"" - } - ], - "Dungeons":[ - { - "x":87, - "y":63, - "playerInvOnly":true, - "anchorRight":false, - "anchorBottom":false, - "backgroundIndex":0, - "command":"", - "icon":"" - }, - { - "x": 108, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "warp dungeon_hub", - "icon": "skull:9b56895b9659896ad647f58599238af532d46db9c1b0389b8bbeb70999dab33d" - }, - { - "x": 129, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "reparty", - "icon": "COMMAND" - }, - { - "x": 150, - "y": 63, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "pets", - "icon": "extra:pet_gold" - }, - { - "x": 87, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 108, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 129, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 150, - "y": 5, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 87, - "y": 25, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 105, - "y": 25, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 87, - "y": 43, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 105, - "y": 43, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 143, - "y": 35, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 60, - "y": 8, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 2, - "command": "/wardrobe", - "icon": "extra:baubles_gold" - }, - { - "x": 60, - "y": 60, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 26, - "y": 8, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 26, - "y": 60, - "playerInvOnly": true, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 2, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 22, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 42, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": 62, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": -84, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": -64, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "", - "icon": "" - }, - { - "x": 2, - "y": -44, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 2, - "y": -24, - "playerInvOnly": false, - "anchorRight": true, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 4, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 1", - "icon": "DIAMOND_BONZO_HEAD" - }, - { - "x": 25, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 2", - "icon": "DIAMOND_SCARF_HEAD" - }, - { - "x": 46, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 3", - "icon": "DIAMOND_PROFESSOR_HEAD" - }, - { - "x": 67, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 4", - "icon": "DIAMOND_THORN_HEAD" - }, - { - "x": 88, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 5", - "icon": "DIAMOND_LIVID_HEAD" - }, - { - "x": 109, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 6", - "icon": "DIAMOND_SADAN_HEAD" - }, - { - "x": 130, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon master_catacombs 7", - "icon": "DIAMOND_NECRON_HEAD" - }, - { - "x": 151, - "y": -19, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "" - }, - { - "x": -19, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon catacombs 1", - "icon": "GOLD_BONZO_HEAD" - }, - { - "x": -19, - "y": 22, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon catacombs 2", - "icon": "GOLD_SCARF_HEAD" - }, - { - "x": -19, - "y": 42, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon catacombs 3", - "icon": "GOLD_PROFESSOR_HEAD" - }, - { - "x": -19, - "y": 62, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": false, - "backgroundIndex": 0, - "command": "joindungeon catacombs 4", - "icon": "GOLD_THORN_HEAD" - }, - { - "x": -19, - "y": -84, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "joindungeon catacombs 5", - "icon": "GOLD_LIVID_HEAD" - }, - { - "x": -19, - "y": -64, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "/joindungeon catacombs 6", - "icon": "GOLD_SADAN_HEAD" - }, - { - "x": -19, - "y": -44, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "joindungeon catacombs 7", - "icon": "GOLD_NECRON_HEAD" - }, - { - "x": -19, - "y": -24, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 4, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 25, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 46, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 67, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 88, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 109, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 130, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - }, - { - "x": 151, - "y": 2, - "playerInvOnly": false, - "anchorRight": false, - "anchorBottom": true, - "backgroundIndex": 0, - "command": "" - } - ] + "Empty": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + } + ], + "Empty (Dark)": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "", + "icon": "" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 1, + "command": "" + } + ], + "Simple": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/warp home", + "icon": "skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/warp hub", + "icon": "skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/enderchest", + "icon": "ENDER_CHEST" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/pets", + "icon": "extra:pet_gold" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 2, + "command": "/wardrobe", + "icon": "extra:baubles_gold" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "", + "icon": "BONE" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + } + ], + "All Warps": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "pets", + "icon": "extra:pet_gold" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/wardrobe", + "icon": "extra:armor" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/enderchest", + "icon": "ENDER_CHEST" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "hotm", + "icon": "skull:86f06eaa3004aeed09b3d5b45d976de584e691c0e9cade133635de93d23b9edb" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "GOLD_BLOCK" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/pv", + "icon": "PAINTING" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "extra:baubles_gold" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/ah", + "icon": "GOLD_BLOCK" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/bz", + "icon": "GOLD_BARDING" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "warp museum", + "icon": "skull:438cf3f8e54afc3b3f91d20a49f324dca1486007fe545399055524c17941f4dc" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp home", + "icon": "skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp hub", + "icon": "skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp dungeon_hub", + "icon": "skull:9b56895b9659896ad647f58599238af532d46db9c1b0389b8bbeb70999dab33d" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp end", + "icon": "skull:7840b87d52271d2a755dedc82877e0ed3df67dcc42ea479ec146176b02779a5" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "warp barn", + "icon": "skull:4d3a6bd98ac1833c664c4909ff8d2dc62ce887bdcf3cc5b3848651ae5af6b" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "warp desert", + "icon": "skull:51539dddf9ed255ece6348193cd75012c82c93aec381f05572cecf7379711b3b" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp gold", + "icon": "skull:73bc965d579c3c6039f0a17eb7c2e6faf538c7a5de8e60ec7a719360d0a857a9" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp deep", + "icon": "skull:569a1f114151b4521373f34bc14c2963a5011cdc25a6554c48c708cd96ebfc" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp crystals", + "icon": "skull:21dbe30b027acbceb612563bd877cd7ebb719ea6ed1399027dcee58bb9049d4a" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp forge", + "icon": "skull:5cbd9f5ec1ed007259996491e69ff649a3106cf920227b1bb3a71ee7a89863f" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp mines", + "icon": "skull:6b20b23c1aa2be0270f016b4c90d6ee6b8330a17cfef87869d6ad60b2ffbf3b5" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp park", + "icon": "skull:a221f813dacee0fef8c59f76894dbb26415478d9ddfc44c2e708a6d3b7549b" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp spider", + "icon": "skull:9d7e3b19ac4f3dee9c5677c135333b9d35a7f568b63d1ef4ada4b068b5a25" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/warp nether", + "icon": "skull:c3687e25c632bce8aa61e0d64c24e694c3eea629ea944f4cf30dcfb4fbce071" + } + ], + "More Buttons": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/sbmenu", + "icon": "SKYBLOCK_MENU" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "enderchest", + "icon": "ENDER_CHEST" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "pets", + "icon": "BONE" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "effects", + "icon": "POTION" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/recipes", + "icon": "extra:recipe" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/collections", + "icon": "PAINTING" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/scg", + "icon": "BOOK" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/calendar", + "icon": "BOOK_AND_QUILL" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "CHEST" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "craft", + "icon": "WORKBENCH" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 2, + "command": "/wardrobe", + "icon": "extra:baubles_gold" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/warp hub", + "icon": "skull:d7cc6687423d0570d556ac53e0676cb563bbdd9717cd8269bdebed6f6d4e7bf8" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/warp home", + "icon": "skull:c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "", + "icon": "BONE" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/ah", + "icon": "GOLD_BLOCK" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "/bz", + "icon": "GOLD_BARDING" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + } + ], + "Dungeons": [ + { + "x": 87, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 108, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "warp dungeon_hub", + "icon": "skull:9b56895b9659896ad647f58599238af532d46db9c1b0389b8bbeb70999dab33d" + }, + { + "x": 129, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "reparty", + "icon": "COMMAND" + }, + { + "x": 150, + "y": 63, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "pets", + "icon": "extra:pet_gold" + }, + { + "x": 87, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 108, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 129, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 150, + "y": 5, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 25, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 87, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 105, + "y": 43, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 143, + "y": 35, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 60, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 2, + "command": "/wardrobe", + "icon": "extra:baubles_gold" + }, + { + "x": 60, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 8, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 26, + "y": 60, + "playerInvOnly": true, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 2, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 22, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 42, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": 62, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -84, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -64, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "", + "icon": "" + }, + { + "x": 2, + "y": -44, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 2, + "y": -24, + "playerInvOnly": false, + "anchorRight": true, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 1", + "icon": "DIAMOND_BONZO_HEAD" + }, + { + "x": 25, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 2", + "icon": "DIAMOND_SCARF_HEAD" + }, + { + "x": 46, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 3", + "icon": "DIAMOND_PROFESSOR_HEAD" + }, + { + "x": 67, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 4", + "icon": "DIAMOND_THORN_HEAD" + }, + { + "x": 88, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 5", + "icon": "DIAMOND_LIVID_HEAD" + }, + { + "x": 109, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 6", + "icon": "DIAMOND_SADAN_HEAD" + }, + { + "x": 130, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon master_catacombs 7", + "icon": "DIAMOND_NECRON_HEAD" + }, + { + "x": 151, + "y": -19, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "" + }, + { + "x": -19, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon catacombs 1", + "icon": "GOLD_BONZO_HEAD" + }, + { + "x": -19, + "y": 22, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon catacombs 2", + "icon": "GOLD_SCARF_HEAD" + }, + { + "x": -19, + "y": 42, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon catacombs 3", + "icon": "GOLD_PROFESSOR_HEAD" + }, + { + "x": -19, + "y": 62, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": false, + "backgroundIndex": 0, + "command": "joindungeon catacombs 4", + "icon": "GOLD_THORN_HEAD" + }, + { + "x": -19, + "y": -84, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "joindungeon catacombs 5", + "icon": "GOLD_LIVID_HEAD" + }, + { + "x": -19, + "y": -64, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "/joindungeon catacombs 6", + "icon": "GOLD_SADAN_HEAD" + }, + { + "x": -19, + "y": -44, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "joindungeon catacombs 7", + "icon": "GOLD_NECRON_HEAD" + }, + { + "x": -19, + "y": -24, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 4, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 25, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 46, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 67, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 88, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 109, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 130, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + }, + { + "x": 151, + "y": 2, + "playerInvOnly": false, + "anchorRight": false, + "anchorBottom": true, + "backgroundIndex": 0, + "command": "" + } + ] } diff --git a/src/main/resources/assets/notenoughupdates/official-wiki.css b/src/main/resources/assets/notenoughupdates/official-wiki.css index a9f82a32..f942a3f0 100644 --- a/src/main/resources/assets/notenoughupdates/official-wiki.css +++ b/src/main/resources/assets/notenoughupdates/official-wiki.css @@ -1 +1,22622 @@ -.client-js .mw-dismissable-notice { display: none}.mw-dismissable-notice-close { visibility: hidden}.sitedir-ltr .mw-dismissable-notice-close { float: right}.sitedir-rtl .mw-dismissable-notice-close { float: left}.sitedir-ltr .mw-dismissable-notice-body { margin: .5em 20% .5em 5em}.sitedir-rtl .mw-dismissable-notice-body { margin: .5em 5em .5em 20%}.hlist dl,.hlist ol,.hlist ul { margin: 0; padding: 0}.hlist dl dl,.hlist ol dl,.hlist ul dl,.hlist dl ol,.hlist ol ol,.hlist ul ol,.hlist dl ul,.hlist ol ul,.hlist ul ul { display: inline}.hlist dd,.hlist dt,.hlist li { margin: 0; display: inline}ul.hlist li,.hlist>ul li,.hlist>dl li { display: inline-block; margin-right: 8px}.hlist-separated li:after { content: '•'!important; padding-left: 8px; font-size: 1em; line-height: 1}.hlist-separated :last-child:after { content: none!important}.mw-ui-button { background-color: #f8f9fa; color: #202122; display: inline-block; -moz-box-sizing: border-box; box-sizing: border-box; border: 1px solid #a2a9b1; border-radius: 2px; cursor: pointer; vertical-align: middle; font-family: inherit; font-size: 1em; font-weight: 700; line-height: 1.28571429em; text-align: center; -webkit-appearance: none}.mw-ui-button:not(.mw-ui-icon-element) { min-height: 32px; min-width: 4em; max-width: 28.75em; margin: 0; padding: 5px 12px}.mw-ui-button:not(:disabled) { -webkit-transition: background-color 100ms,color 100ms,border-color 100ms,box-shadow 100ms; transition: background-color 100ms,color 100ms,border-color 100ms,box-shadow 100ms}.mw-ui-button:not(:disabled):visited { color: #202122}.mw-ui-button:not(:disabled):hover { background-color: #fff; color: #404244; border-color: #a2a9b1}.mw-ui-button:not(:disabled):focus { color: #202122; border-color: #36c; box-shadow: inset 0 0 0 1px #36c,inset 0 0 0 2px #fff; outline-width: 0}.mw-ui-button:not(:disabled):focus::-moz-focus-inner { border-color: transparent; padding: 0}.mw-ui-button:not(:disabled):active,.mw-ui-button:not(:disabled).is-on { background-color: #c8ccd1; color: #000; border-color: #72777d; box-shadow: none}.mw-ui-button:disabled { background-color: #c8ccd1; color: #fff; border-color: #c8ccd1; cursor: default}.mw-ui-button.mw-ui-icon-element:not(.mw-ui-icon-with-label-desktop) { color: transparent!important}.mw-ui-button.mw-ui-icon-element:not(.mw-ui-icon-with-label-desktop) span { display: block; position: absolute!important; clip: rect(1px,1px,1px,1px); width: 1px; height: 1px; margin: -1px; border: 0; padding: 0; overflow: hidden}@media all and (max-width: 1000px) { .mw-ui-button.mw-ui-icon-element.mw-ui-icon-with-label-desktop { color:transparent!important } .mw-ui-button.mw-ui-icon-element span { display: block; position: absolute!important; clip: rect(1px,1px,1px,1px); width: 1px; height: 1px; margin: -1px; border: 0; padding: 0; overflow: hidden }}.mw-ui-button.mw-ui-quiet,.mw-ui-button.mw-ui-quiet.mw-ui-progressive,.mw-ui-button.mw-ui-quiet.mw-ui-destructive { background-color: transparent; color: #202122; border-color: transparent; font-weight: 700}.mw-ui-button.mw-ui-quiet:not(.mw-ui-icon-element),.mw-ui-button.mw-ui-quiet.mw-ui-progressive:not(.mw-ui-icon-element),.mw-ui-button.mw-ui-quiet.mw-ui-destructive:not(.mw-ui-icon-element) { min-height: 32px}input[type=checkbox]:hover+.mw-ui-button.mw-ui-quiet,input[type=checkbox]:hover+.mw-ui-button.mw-ui-quiet.mw-ui-progressive,input[type=checkbox]:hover+.mw-ui-button.mw-ui-quiet.mw-ui-destructive,.mw-ui-button.mw-ui-quiet:hover,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:hover,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:hover { background-color: rgba(0,24,73,.02745098); color: #202122; border-color: transparent}input[type=checkbox]:focus+.mw-ui-button.mw-ui-quiet,input[type=checkbox]:focus+.mw-ui-button.mw-ui-quiet.mw-ui-progressive,input[type=checkbox]:focus+.mw-ui-button.mw-ui-quiet.mw-ui-destructive,.mw-ui-button.mw-ui-quiet:focus,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:focus,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:focus { color: #202122; border-color: #36c; box-shadow: inset 0 0 0 1px #36c,inset 0 0 0 2px #fff}input[type=checkbox]:active+.mw-ui-button.mw-ui-quiet,input[type=checkbox]:active+.mw-ui-button.mw-ui-quiet.mw-ui-progressive,input[type=checkbox]:active+.mw-ui-button.mw-ui-quiet.mw-ui-destructive,.mw-ui-button.mw-ui-quiet:active,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:active,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:active { background-color: rgba(0,36,73,.08235294); color: #000; border-color: #72777d; box-shadow: none}.mw-ui-button.mw-ui-quiet:disabled,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled,.mw-ui-button.mw-ui-quiet:disabled:hover,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled:hover,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled:hover,.mw-ui-button.mw-ui-quiet:disabled:active,.mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled:active,.mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled:active { background-color: transparent; color: #72777d; border-color: transparent}.mw-ui-button.mw-ui-progressive:not(:disabled) { background-color: #36c; color: #fff; border-color: #36c}.mw-ui-button.mw-ui-progressive:not(:disabled):hover { background-color: #447ff5; border-color: #447ff5}.mw-ui-button.mw-ui-progressive:not(:disabled):focus { box-shadow: inset 0 0 0 1px #36c,inset 0 0 0 2px #fff}.mw-ui-button.mw-ui-progressive:not(:disabled):active,.mw-ui-button.mw-ui-progressive:not(:disabled).is-on { background-color: #2a4b8d; border-color: #2a4b8d; box-shadow: none}.mw-ui-button.mw-ui-progressive:disabled { background-color: #c8ccd1; color: #fff; border-color: #c8ccd1}.mw-ui-button.mw-ui-progressive.mw-ui-quiet { color: #36c; background-color: transparent; border-color: transparent}input[type=checkbox]:hover+.mw-ui-button.mw-ui-progressive.mw-ui-quiet,.mw-ui-button.mw-ui-progressive.mw-ui-quiet:hover { background-color: rgba(52,123,255,.2); border-color: transparent; color: #447ff5}input[type=checkbox]:focus+.mw-ui-button.mw-ui-progressive.mw-ui-quiet,.mw-ui-button.mw-ui-progressive.mw-ui-quiet:focus { color: #36c; border-color: #36c}input[type=checkbox]:active+.mw-ui-button.mw-ui-progressive.mw-ui-quiet,.mw-ui-button.mw-ui-progressive.mw-ui-quiet:active { color: #fff; background-color: #2a4b8d; border-color: #2a4b8d}.mw-ui-button.mw-ui-destructive:not(:disabled) { background-color: #d33; color: #fff; border-color: #d33}.mw-ui-button.mw-ui-destructive:not(:disabled):hover { background-color: #ff4242; border-color: #ff4242}.mw-ui-button.mw-ui-destructive:not(:disabled):focus { box-shadow: inset 0 0 0 1px #d33,inset 0 0 0 2px #fff}.mw-ui-button.mw-ui-destructive:not(:disabled):active,.mw-ui-button.mw-ui-destructive:not(:disabled).is-on { background-color: #b32424; border-color: #b32424; box-shadow: none}.mw-ui-button.mw-ui-destructive:disabled { background-color: #c8ccd1; color: #fff; border-color: #c8ccd1}.mw-ui-button.mw-ui-destructive.mw-ui-quiet { color: #d33; background-color: transparent; border-color: transparent}input[type=checkbox]:hover+.mw-ui-button.mw-ui-destructive.mw-ui-quiet,.mw-ui-button.mw-ui-destructive.mw-ui-quiet:hover { background-color: rgba(209,29,19,.2); border-color: transparent; color: #ff4242}input[type=checkbox]:focus+.mw-ui-button.mw-ui-destructive.mw-ui-quiet,.mw-ui-button.mw-ui-destructive.mw-ui-quiet:focus { color: #d33; border-color: #d33}input[type=checkbox]:active+.mw-ui-button.mw-ui-destructive.mw-ui-quiet,.mw-ui-button.mw-ui-destructive.mw-ui-quiet:active { color: #fff; background-color: #b32424; border-color: #b32424}.mw-ui-button.mw-ui-big { font-size: 1.3em}.mw-ui-button.mw-ui-block { display: block; width: 100%; margin-left: auto; margin-right: auto}a.mw-ui-button { text-decoration: none}a.mw-ui-button:hover,a.mw-ui-button:focus { text-decoration: none}.mw-ui-button-group>* { min-width: 48px; border-radius: 0; float: left}.mw-ui-button-group>*:first-child { border-top-left-radius: 2px; border-bottom-left-radius: 2px}.mw-ui-button-group>*:not(:first-child) { border-left: 0}.mw-ui-button-group>*:last-child { border-top-right-radius: 2px; border-bottom-right-radius: 2px}.mw-ui-button-group .is-on .button { cursor: default}.mw-ui-icon { font-size: initial; position: relative; display: inline-block; box-sizing: content-box!important; width: 1.25em; height: 1.25em; min-width: 1.25em; min-height: 1.25em; flex-basis: 1.25em; vertical-align: middle; line-height: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; -moz-appearance: none; -webkit-appearance: none; background-color: transparent; border: 0; margin: 0; padding: 0}.mw-ui-icon:before { content: ''; display: block; width: 100%; height: 100%; min-width: 1.25em; min-height: 1.25em; background-repeat: no-repeat; background-size: 1.25em 1.25em; background-position: center}.mw-ui-icon-flush-top { margin-top: -.75em}.mw-ui-icon-flush-left { margin-left: -.75em}.mw-ui-icon-flush-right { margin-right: -.75em}.mw-ui-icon-element { border-radius: 2px; padding: .75em; -webkit-transition: background-color 100ms; transition: background-color 100ms; color: transparent}.mw-ui-icon-element:focus,.mw-ui-icon-element:active,.mw-ui-icon-element:visited { color: transparent}.mw-ui-icon-element:active { background-color: rgba(0,0,0,.03)}@media(hover: hover) { .mw-ui-icon-element:not(.disabled):hover { background-color:rgba(0,0,0,.03) }}.mw-ui-icon-small { width: 1em; height: 1em; min-width: 1em; min-height: 1em; flex-basis: 1em; line-height: 1em}.mw-ui-icon-small:before { content: ''; display: block; width: 100%; height: 100%; min-width: 1em; min-height: 1em; background-repeat: no-repeat; background-size: 1em 1em; background-position: center}.mw-ui-icon-small.mw-ui-icon-element { padding: .5625em}.mw-ui-icon-small.mw-ui-icon-flush-left { margin-left: -.5625em}.mw-ui-icon-small.mw-ui-icon-flush-right { margin-right: -.5625em}.mw-ui-icon-small.mw-ui-icon-before:before { min-width: 1em; min-height: 1em; margin-right: .5625em}.mw-ui-icon-before { width: auto; max-width: 100%}.mw-ui-icon-before:before { display: inline-block; font-size: initial; width: auto; min-width: 1.25em; min-height: 1.25em; margin-right: 8px; vertical-align: middle}.mw-ui-icon-before span { vertical-align: middle}@media all and (min-width: 1000px) { .mw-ui-icon-with-label-desktop { color:#54595d; width: auto; line-height: inherit; flex-basis: auto } .mw-ui-icon-with-label-desktop:hover,.mw-ui-icon-with-label-desktop:focus,.mw-ui-icon-with-label-desktop:active,.mw-ui-icon-with-label-desktop:visited { color: #54595d; text-decoration: none } .mw-ui-icon-with-label-desktop:before { width: auto; display: inline-block; margin-right: 8px; vertical-align: text-bottom }}.minerva__tab-container { white-space: nowrap; overflow-x: auto}.minerva__tab-container .minerva__tab { font-size: .85em; margin: 0 10px 0 0; color: #54595d; font-weight: 700; padding-bottom: 6px; display: inline-block}.minerva__tab-container .minerva__tab:visited,.minerva__tab-container .minerva__tab:hover,.minerva__tab-container .minerva__tab:active,.minerva__tab-container .minerva__tab.new,.minerva__tab-container .minerva__tab.new:visited,.minerva__tab-container .minerva__tab.new:active,.minerva__tab-container .minerva__tab.new:hover { color: #54595d; text-decoration: none}.minerva__tab-container .minerva__tab:last-child { margin-right: 0}.minerva__tab-container .minerva__tab.selected { border-bottom: 2px solid #54595d}.toggle-list__list--drop-down { -webkit-transform: translateY(-8px); -ms-transform: translateY(-8px); transform: translateY(-8px); -webkit-tap-highlight-color: transparent}.minerva-animations-ready .toggle-list__list--drop-down { -webkit-transition: opacity 100ms ease-in-out,-webkit-tap-highlight-color 0s ease-in-out,transform 100ms ease-in-out,visibility 100ms ease-in-out; transition: opacity 100ms ease-in-out,-webkit-tap-highlight-color 0s ease-in-out,transform 100ms ease-in-out,visibility 100ms ease-in-out}.toggle-list__checkbox:checked~.toggle-list__list--drop-down { -webkit-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0)}.toggle-list-item { display: block; padding: .75em .875em}.toggle-list-item:hover { background: #eaecf0}.toggle-list-item__anchor { display: block; line-height: 1}.toggle-list-item__anchor:hover { text-decoration: none}.toggle-list-item__anchor:visited,.toggle-list-item__anchor:active { color: #54595d}.toggle-list-item__icon { vertical-align: middle}.toggle-list-item__label { text-align: left; color: #54595d; font-weight: 700; white-space: nowrap; vertical-align: middle; font-size: .875em}.minerva-user-menu-list { top: 100%; right: -.75em; min-width: 200px; border-radius: 2px}.minerva--history-page-action-enabled .page-actions-menu__list-item { flex-basis: auto}.minerva--history-page-action-enabled .page-actions-menu__list-item:first-child { flex-grow: 0}.page-actions-overflow-list { top: 100%; right: -.75em; border-radius: 2px}.mw-ui-icon-minerva-ellipsis:before { -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg)}@media screen { @counter-style meetei { system: numeric; symbols: '\ABF0''\ABF1''\ABF2''\ABF3''\ABF4''\ABF5''\ABF6''\ABF7''\ABF8''\ABF9'; suffix: ') ' } @counter-style santali { system: numeric; symbols: '\1C50''\1C51''\1C52''\1C53''\1C54''\1C55''\1C56''\1C57''\1C58''\1C59' } ol:lang(azb) li,ol:lang(bcc) li,ol:lang(bgn) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(lrc) li,ol:lang(luz) li,ol:lang(mzn) li { list-style-type: persian } ol:lang(ckb) li,ol:lang(sdh) li { list-style-type: arabic-indic } ol:lang(hi) li,ol:lang(mai) li,ol:lang(mr) li,ol:lang(ne) li { list-style-type: devanagari } ol:lang(as) li,ol:lang(bn) li { list-style-type: bengali } ol:lang(mni) li { list-style-type: meetei } ol:lang(or) li { list-style-type: oriya } ol:lang(sat) li { list-style-type: santali }}div,span,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,ins,em,img,small,strike,strong,sub,sup,tt,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,input,button,select,audio,video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; background: 0 0}table,caption,tbody,tfoot,thead,tr,th,td { font-size: 100%}caption { font-weight: 700}button { border: 0; background-color: transparent; cursor: pointer}input { line-height: normal}ul { list-style: none}table { border-collapse: collapse}html,body { height: 100%}html { font-size: 100%; -webkit-text-size-adjust: none}body { background-color: transparent; color: #202122; margin: 0}main { display: block}.mw-body { border-top: 1px solid transparent; padding-bottom: 32px}.overlay-enabled,.mw-body { background-color: transparent}.header-container { border-bottom: 1px solid #c8ccd1; padding: 0 16px}.header-container.header-chrome { background-color: #eaecf0; border: 0; box-shadow: inset 0 -1px 3px rgba(0,0,0,.08)}.navigation-drawer--loading,#footer-info-lastmod { display: none}.header { display: table; width: 100%; border-spacing: 0; border-collapse: collapse; height: 3.375em; white-space: nowrap; border-top: 1px solid #c8ccd1; margin-top: -1px}.header>div,.header>.navigation-drawer { position: relative; vertical-align: middle; display: table-cell}.header>div a { display: block}.header .branding-box { width: auto; opacity: .66}.header .branding-box h1,.header .branding-box a { margin-left: 5px; font-size: 1em; text-decoration: none; color: #202122}.header .branding-box h1 span,.header .branding-box a span { line-height: 1; font-size: inherit}.header .branding-box h1 img,.header .branding-box a img { vertical-align: middle}.header .branding-box h1>*,.header .branding-box a>* { float: left}.header .branding-box h1 sup,.header .branding-box a sup { color: #54595d; display: none}.beta .header .branding-box h1 sup,.beta .header .branding-box a sup { display: initial}.header>.header-title { vertical-align: middle}#searchInput { cursor: text}.search-box,.header .search-box { display: none; width: auto}.search-box .search { background-color: #fff; background-position: left .5em center; background-repeat: no-repeat; background-size: 1.125em; -webkit-appearance: none; width: 100%; margin-top: 0; height: 2.25em; border: 1px solid #fff; border-radius: 2px; padding: 7px 0 7px 2.0625em; box-shadow: 0 1px 1px rgba(0,0,0,.05); outline: 0; -webkit-transition: border-color 250ms,box-shadow 250ms; transition: border-color 250ms,box-shadow 250ms}.client-nojs .search-box .search:focus,.search-overlay .search-box .search:focus { border-color: #36c; box-shadow: inset 0 0 0 1px #36c,0 1px 1px rgba(0,0,0,.05)}input.search::-webkit-search-decoration,input.search::-webkit-search-cancel-button,input.search::-webkit-search-results-button,input.search::-webkit-search-results-decoration { display: none}.content h2 { clear: left}.content .collapsible-heading .edit-page { visibility: hidden}.content .collapsible-heading.open-block .edit-page { visibility: visible}.content .mw-parser-output>h2,.content .section-heading { border-bottom: 1px solid #eaecf0; margin-bottom: .5em}.content .mw-parser-output>h1,.content .mw-parser-output>h2,.content .mw-parser-output>h3,.content .mw-parser-output>h4,.content .mw-parser-output>h5,.content .section-heading,.content .in-block { display: table}.content .mw-parser-output>h1 .mw-headline,.content .mw-parser-output>h2 .mw-headline,.content .mw-parser-output>h3 .mw-headline,.content .mw-parser-output>h4 .mw-headline,.content .mw-parser-output>h5 .mw-headline,.content .section-heading .mw-headline,.content .in-block .mw-headline { width: 100%}.content .mw-parser-output>h1>span,.content .mw-parser-output>h2>span,.content .mw-parser-output>h3>span,.content .mw-parser-output>h4>span,.content .mw-parser-output>h5>span,.content .section-heading>span,.content .in-block>span { display: table-cell; vertical-align: middle}.content .mw-parser-output>h1>.mw-editsection>.mw-ui-icon-element,.content .mw-parser-output>h2>.mw-editsection>.mw-ui-icon-element,.content .mw-parser-output>h3>.mw-editsection>.mw-ui-icon-element,.content .mw-parser-output>h4>.mw-editsection>.mw-ui-icon-element,.content .mw-parser-output>h5>.mw-editsection>.mw-ui-icon-element,.content .section-heading>.mw-editsection>.mw-ui-icon-element,.content .in-block>.mw-editsection>.mw-ui-icon-element { margin-top: -.75em; margin-bottom: -.75em}.client-nojs .section-heading .indicator { display: none}#page-secondary-actions { clear: both}#page-secondary-actions a { margin: 10px 2px 2px 0}#bodyContent .panel .content,.overlay .content-header,.overlay .panel,.page-list.side-list .list-thumb,.page-list li,.topic-title-list li,.site-link-list li,.drawer,.messagebox,.errorbox,.successbox,.warningbox,.list-header,.mw-revision { padding-left: 16px; padding-right: 16px}.talk-overlay .comment .comment-content,.image-list,.pre-content,#mw-content-text>form>.oo-ui-fieldLayout>.oo-ui-fieldLayout-body,#mw-content-text>form>.oo-ui-widget,.content,.post-content { margin: 0 16px}.minerva__subtitle { margin-top: 10px; margin-bottom: 10px}.minerva__subtitle:empty { margin: 0}@media all and (min-width: 720px) { .page-summary-list,.topic-title-list,.site-link-list,.overlay .panel,.list-header { padding-left:3.35em; padding-right: 3.35em }}.heading-holder { padding: 20px 0 0; position: relative}.heading-holder .tagline { color: #54595d; font-size: .85em}.page-heading { margin-bottom: 12px}.mw-ui-icon-element.disabled,.language-selector.disabled { cursor: default; opacity: .25}#page-actions { position: relative}.page-actions-menu { -moz-box-sizing: border-box; box-sizing: border-box; border-top: 1px solid #eaecf0; border-bottom: 1px solid #c8ccd1; margin-top: -1px}.page-actions-menu__list { display: flex; height: 3em; justify-content: space-between}.page-actions-menu__list-item { display: flex; justify-content: flex-end; align-items: center; min-width: 0; overflow: hidden}.page-actions-menu__list-item>a { font-weight: 500}.page-actions-menu__list-item li>*:hover { box-shadow: none}.page-actions-menu__list-item:first-child { flex-grow: 1; justify-content: flex-start; margin-left: -8px}.page-actions-menu__list-item:last-child { margin-right: -8px}.client-nojs .watch-this-article { visibility: hidden}.client-nojs .is-authenticated .watch-this-article { visibility: visible}@media all and (max-width: 320px - 1) { .client-nojs #page-actions { display:none } .client-nojs #section_0 { border: 0 }}.minerva-user-navigation { display: flex; min-width: 7em; min-height: 3.375em; height: 100%; width: 100%; align-items: center; justify-content: flex-end; position: relative}.minerva-user-navigation>*:last-child { margin-right: -.75em}.view-border-box *,.view-border-box { -moz-box-sizing: border-box; box-sizing: border-box}.client-js .mw-redirectedfrom,.printfooter,.jsonly { display: none}.client-js .jsonly { display: inherit}.hidden { display: none!important}#mw-mf-viewport { position: relative; height: 100%}#mw-mf-page-center { width: 100%; min-height: 100%; position: relative; background-color: #eaecf0}.content { position: relative; z-index: 0}.minerva-footer { border-top: solid 1px #c8ccd1; overflow: auto; padding-bottom: 6px}.client-nojs footer .indicator,.client-nojs .mw-footer .indicator { display: none}footer .hlist li:after,.mw-footer .hlist li:after { color: #36c}footer>.post-content,.mw-footer>.post-content { overflow: auto; margin-top: 42px}footer>.post-content>*,.mw-footer>.post-content>* { margin-bottom: 9px}footer>.post-content>h2,.mw-footer>.post-content>h2 { border-bottom: solid 1px #c8ccd1; padding-bottom: 10px; margin-top: 42px; font-size: 1em; font-weight: 700}footer>.post-content>h2:first-child,.mw-footer>.post-content>h2:first-child { margin-top: 0}footer>.post-content .hlist,.mw-footer>.post-content .hlist,footer>.post-content .license,.mw-footer>.post-content .license { font-size: .875em}.last-modified-bar { border-bottom: solid 1px #c8ccd1; background-color: #eaecf0; color: #72777d; padding-top: .75em; padding-bottom: .75em; font-size: .875em; -webkit-transition: background-color 250ms,color 250ms; transition: background-color 250ms,color 250ms}.last-modified-bar a,.last-modified-bar a:visited { color: #54595d}.last-modified-bar a:nth-child(1),.last-modified-bar a:visited:nth-child(1) { font-weight: 700}.last-modified-bar a.external { background-image: none; padding-right: 0}.last-modified-bar__content { align-items: center; display: -ms-flexbox; display: flex}.last-modified-bar__text { padding-right: 3.5em; padding-left: .75em; line-height: 1.65; vertical-align: middle; flex-grow: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap}@media(max-width: 720px) { .last-modified-bar__text { padding-right:1em }}@media print { .noprint,.banner-container,.header,.minerva__tab-container,.page-actions-menu,.post-content { display: none } h1,h2,h3,h4,h5,h6 { page-break-after: avoid } table,figure,img { page-break-inside: avoid } img { max-width: 100% } img.image-lazy-loaded { -webkit-animation: none!important; animation: none!important }}@media print and (max-device-width: 720px) { @page { margin:50px 0 } html { padding: 0 50px } .header-container,.header-container.header-chrome { background: #fff; box-shadow: none!important } .header { border-top: 0; display: block; height: auto; padding: 0 16px } .header .branding-box { padding-left: 0!important } .header .branding-box sup { display: none!important } .header>nav,.header>div { display: none!important } .header>.branding-box { height: auto; display: block!important; padding: 0 0 51px 50px } .header>.branding-box h1 { font-size: inherit } .header>.branding-box h1>* { float: none } .header>.branding-box h1 img { height: 41px; width: auto; vertical-align: inherit } .hatnote,.pre-content #page-actions { display: none } .pre-content { display: block; padding: 51px 0 35px } .pre-content h1 { font-size: 70px; font-weight: 400; font-style: italic; font-stretch: normal; line-height: normal; letter-spacing: normal; text-align: left; color: #000 } .pre-content .tagline { font-size: 36px } .mw-body>.content { padding-top: 55px; position: relative } .mw-body>.content:before { top: 0 } .thumbinner { width: auto!important } .thumbinner>a { width: 100% } .thumb { position: relative; padding: 58px 0!important; text-align: left; margin: 0!important } .thumb:after { bottom: 30px } .thumb:after,.mw-body>.content:before { position: absolute; left: 0; content: ''; display: block; width: 55px; height: 2px; background: #999 } .thumbcaption { margin-top: 23px!important; width: 100%; font-style: italic; font-size: 28px } [class|=mw-content] { font-size: 36px } [class|=mw-content] a { text-decoration: underline; color: #202122 } [class|=mw-content] blockquote { color: #54595d; padding: 5px 39px; font-style: italic } [class|=mw-content] .section-heading { border-bottom: 0; padding-bottom: 0; margin-bottom: 16px } [class|=mw-content] h2 { font-size: 48px } [class|=mw-content] h3 { font-size: 40px; margin-bottom: 13px } [class|=mw-content] h4,[class|=mw-content] h5,[class|=mw-content] h6 { font-size: 36px; margin-bottom: 12px } [class|=mw-content] .wikitable { font-size: 16px } [class|=mw-content] .infobox { font-size: 30px } .references .mw-cite-backlink { display: none } .references .reference-text { font-style: italic } .references a { text-decoration: none } .references .external.text { background-image: none } .printfooter { display: block; padding-top: 108px; font-size: 30px } #mw-mf-page-center>footer { border-top: solid 4px #000; padding-top: 23px; background: #fff!important } #mw-mf-page-center>footer .mw-ui-icon:before { display: none!important } #mw-mf-page-center>footer .last-modified-bar { background: 0 0!important; border: 0!important } #mw-mf-page-center>footer .last-modifier-tagline { font-size: 36px; padding-top: 0!important; padding-bottom: 16px!important } #mw-mf-page-center>footer .last-modified-bar,#mw-mf-page-center>footer .last-modified-bar a { font-weight: 700!important; color: #000!important } #mw-mf-page-center>footer .post-content { margin-top: 15px!important; display: block } #mw-mf-page-center>footer .post-content .hlist,#mw-mf-page-center>footer .post-content h2 { display: none } #mw-mf-page-center>footer .post-content .license a,#mw-mf-page-center>footer .post-content .license { font-size: 30px; color: #999; font-weight: 400 }}@font-face { font-family: raleway; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCFPrEHJA.woff2) format('woff2'); unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face { font-family: raleway; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCMPrEHJA.woff2) format('woff2'); unicode-range: U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face { font-family: raleway; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCHPrEHJA.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face { font-family: raleway; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: raleway; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: italic; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBRrPtMoH62xUZCyrg2Wi_FBw.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: italic; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBRrPtMoH62xUZCyrg4Wi8.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: normal; font-weight: 200; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKAKkvcwr4Pro.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: normal; font-weight: 200; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKAKkvfQr4.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: normal; font-weight: 300; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKZKovcwr4Pro.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: normal; font-weight: 300; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKZKovfQr4.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBTrPtMoH62xUZCwYg6Qis.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBTrPtMoH62xUZCz4g6.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKdK0vcwr4Pro.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKdK0vfQr4.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face { font-family: neuton; font-style: normal; font-weight: 800; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKaK4vcwr4Pro.woff2) format('woff2'); unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face { font-family: neuton; font-style: normal; font-weight: 800; font-display: swap; src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKaK4vfQr4.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@media screen and (min-width: 1000px) { .header { max-width:1250px!important }}.banner-container,.header,.page-header-bar,.overlay-header,.content,.overlay-content,.content-unstyled,.pre-content,.post-content,.last-modified-bar,#mw-content-text>form { max-width: 1250px!important}.page-Main_Page .page-heading,.page-Main_Page .pre-content { display: none!important}.page-Main_Page pre { display: none}.page-Main_Page .blocks-list { display: flex; flex-wrap: wrap; justify-content: space-evenly; list-style: none; column-gap: 20px; row-gap: 20px; padding: 0; margin: 0}.page-Main_Page .blocks-item { box-sizing: border-box; color: #ffc376; display: flex; flex: 1 0 180px; text-align: center; margin: 0!important; border: 1px solid #ecebeb; border-radius: 8px; box-shadow: 0 2px 15px rgba(175,175,175,.2); flex-flow: wrap; position: relative}.page-Main_Page .blocks-item:hover { box-shadow: 0 2px 15px rgba(231,135,27,.4)!important; cursor: pointer; top: -2px}.page-Main_Page .blocks-item>a { color: #ffc376; padding: 0 10px 15px; display: flex; flex-direction: column; flex: 1; justify-content: center; border-radius: inherit; text-decoration: none; background-color: transparent}.page-Main_Page .block-icon { background-position: top center; background-repeat: no-repeat; background-size: contain; height: 140px; margin: 0; transition: all .1s ease-in-out}.page-Main_Page .blocks-item-title { margin: 0; font-size: 22px; color: #ffc376}.page-Main_Page .blocks-item-description:not(:empty) { margin-top: 10px}.page-Main_Page .blocks-item-description { font-weight: 300; margin: 0; color: #1a1a1a}.page-Main_Page .block-icon:before { content: ""; display: block; position: relative}.page-Main_Page .blocks-item#block-accessories>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.png) 2x)}.page-Main_Page .blocks-item#block-accessories>a>.block-icon:before,.page-Main_Page .blocks-item#block-accessories:hover>a>.block-icon,.page-Main_Page .blocks-item#block-accessories>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.ro.png) 2x)}.page-Main_Page .blocks-item#block-armor>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.png) 2x)}.page-Main_Page .blocks-item#block-armor>a>.block-icon:before,.page-Main_Page .blocks-item#block-armor:hover>a>.block-icon,.page-Main_Page .blocks-item#block-armor>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.ro.png) 2x)}.page-Main_Page .blocks-item#block-collections>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.png) 2x)}.page-Main_Page .blocks-item#block-collections>a>.block-icon:before,.page-Main_Page .blocks-item#block-collections:hover>a>.block-icon,.page-Main_Page .blocks-item#block-collections>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.ro.png) 2x)}.page-Main_Page .blocks-item#block-hub>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.png) 2x)}.page-Main_Page .blocks-item#block-hub>a>.block-icon:before,.page-Main_Page .blocks-item#block-hub:hover>a>.block-icon,.page-Main_Page .blocks-item#block-hub>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.ro.png) 2x)}.page-Main_Page .blocks-item#block-fairysouls>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.png) 2x)}.page-Main_Page .blocks-item#block-fairysouls>a>.block-icon:before,.page-Main_Page .blocks-item#block-fairysouls:hover>a>.block-icon,.page-Main_Page .blocks-item#block-fairysouls>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.ro.png) 2x)}.page-Main_Page .blocks-item#block-island>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.png) 2x)}.page-Main_Page .blocks-item#block-island>a>.block-icon:before,.page-Main_Page .blocks-item#block-island:hover>a>.block-icon,.page-Main_Page .blocks-item#block-island>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.ro.png) 2x)}.page-Main_Page .blocks-item#block-locations>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.png) 2x)}.page-Main_Page .blocks-item#block-locations>a>.block-icon:before,.page-Main_Page .blocks-item#block-locations:hover>a>.block-icon,.page-Main_Page .blocks-item#block-locations>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.ro.png) 2x)}.page-Main_Page .blocks-item#block-minions>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.png) 2x)}.page-Main_Page .blocks-item#block-minions>a>.block-icon:before,.page-Main_Page .blocks-item#block-minions:hover>a>.block-icon,.page-Main_Page .blocks-item#block-minions>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.ro.png) 2x)}.page-Main_Page .blocks-item#block-pets>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.png) 2x)}.page-Main_Page .blocks-item#block-pets>a>.block-icon:before,.page-Main_Page .blocks-item#block-pets:hover>a>.block-icon,.page-Main_Page .blocks-item#block-pets>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.ro.png) 2x)}.page-Main_Page .blocks-item#block-reforging>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.png) 2x)}.page-Main_Page .blocks-item#block-reforging>a>.block-icon:before,.page-Main_Page .blocks-item#block-reforging:hover>a>.block-icon,.page-Main_Page .blocks-item#block-reforging>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.ro.png) 2x)}.page-Main_Page .blocks-item#block-skills>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.png) 2x)}.page-Main_Page .blocks-item#block-skills>a>.block-icon:before,.page-Main_Page .blocks-item#block-skills:hover>a>.block-icon,.page-Main_Page .blocks-item#block-skills>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.ro.png) 2x)}.page-Main_Page .blocks-item#block-stats>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.png) 2x)}.page-Main_Page .blocks-item#block-stats>a>.block-icon:before,.page-Main_Page .blocks-item#block-stats:hover>a>.block-icon,.page-Main_Page .blocks-item#block-stats>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.ro.png) 2x)}.page-Main_Page .blocks-item#block-weapons>a>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.png) 2x)}.page-Main_Page .blocks-item#block-weapons>a>.block-icon:before,.page-Main_Page .blocks-item#block-weapons:hover>a>.block-icon,.page-Main_Page .blocks-item#block-weapons>a:focus>.block-icon { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png); background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.ro.png) 2x); background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png) 1x,url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.ro.png) 2x)}.page-Main_Page #wrapper { display: flex; flex-direction: row; column-gap: 50px; row-gap: 50px; justify-content: space-between}.page-Main_Page #wrapper #content { display: flex; flex-direction: column; row-gap: 50px}.page-Main_Page #wrapper #content #introduction { display: flex; flex-direction: row; column-gap: 25px; row-gap: 25px; align-content: center}.page-Main_Page #wrapper #content #introduction #welcome { margin: .5em 0}.page-Main_Page #wrapper #content #introduction .blocks-item { margin: 0!important}.page-Main_Page #wrapper #content #statistics .stats-list { display: flex; flex-wrap: wrap; list-style: none; justify-content: space-evenly; padding: 0; row-gap: 25px}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item { margin: 0}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon { background-position: center; background-size: contain; background-repeat: no-repeat; height: 55px; width: 55px; display: inline-block; position: relative; vertical-align: middle}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-edits { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/edits.png)}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-pages { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/pages.png)}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-files { background-image: url(https://wiki.hypixel.net/images/hypixel/icons/files.png)}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text { vertical-align: middle; display: inline-flex; position: relative; flex-direction: column; flex-wrap: nowrap; justify-content: center; align-content: center; margin: 0 15px}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text span:first-child { font-size: 20px}.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text span:nth-child(2) { font-size: 16px}.page-Main_Page #wrapper #content #other-game-content ul { columns: 200px auto}.page-Main_Page #wrapper #content .content-heading { height: 50px; background-color: #1f1f1f; border: 1px solid #333; border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat!important; border-image-width: 35px!important; border-image-outset: 2px!important; margin: 0 0 1em; font-size: 20px; display: flex; justify-content: center; align-items: center}.page-Main_Page #wrapper #sidebar { display: flex; flex-direction: column; row-gap: 50px}.page-Main_Page #wrapper #sidebar .sidebar-heading { text-align: center; font-size: 20px}.page-Main_Page #wrapper #sidebar .sidebar-content { display: flex; flex-direction: column; flex-wrap: nowrap; row-gap: 15px; background-color: #1f1f1f; padding: 20px; border-radius: 3px; border: 1px solid #333; border-image: url(https://wiki.hypixel.net/images/hypixel/borders/square_border.png) 500 500 repeat; border-image-width: 35px!important; border-image-outset: 2px!important}.page-Main_Page #wrapper #sidebar #clock { display: none}.page-Main_Page #wrapper #sidebar #clock p { text-align: center; margin: 0}.page-Main_Page #wrapper #sidebar #clock #clock-time { font-size: 2em}.page-Main_Page #wrapper #sidebar #clock #clock-date { font-size: 1em}@media(max-width: 1000px) { #wrapper { flex-wrap:wrap }}@media(max-width: 720px) { #introduction { flex-wrap:wrap; justify-content: center } .stats-list { flex-direction: column; align-content: center }}.mw-ui-button.mw-ui-progressive { background-color: #e7871b; color: #fff; border: 1px solid #e7871b}.oo-ui-panelLayout-framed { background-color: #eaecf0!important; border-radius: 4px; border: none!important}.oo-ui-dropdownInputWidget.oo-ui-widget-enabled { background-color: transparent}ul.mw-contributions-list li { min-height: 0!important}ul.special li { min-height: 0!important}body { color: transparent; background-color: transparent; font-family: Raleway,helvetica,serif!important}#content h1,#content h2,#content h3 { font-family: Neuton,Raleway,helvetica,serif!important}html,#mw-mf-page-center,#mw-script-doc,#content,.navbox,.navbox-subgroup,.overlay.search-overlay { background-color: #fff!important}.overlay.search-overlay { background-color: #fff!important}.overlay.search-overlay .search-box { display: block!important; position: relative!important}a.external { background-image: none!important; padding-right: 0!important}.mw-body h2.list-header { margin-top: 16px}.page-heading>h1 { font-size: 1.7em!important; font-weight: 400!important; line-height: 1.3; word-wrap: break-word; word-break: break-word}.list-header { background-color: transparent; color: inherit}#toc ul { list-style: decimal}#mw-toc-heading::before { background-image: url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJsaXN0IiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtbGlzdCBmYS13LTE2IiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04MCAzNjhIMTZhMTYgMTYgMCAwIDAtMTYgMTZ2NjRhMTYgMTYgMCAwIDAgMTYgMTZoNjRhMTYgMTYgMCAwIDAgMTYtMTZ2LTY0YTE2IDE2IDAgMCAwLTE2LTE2em0wLTMyMEgxNkExNiAxNiAwIDAgMCAwIDY0djY0YTE2IDE2IDAgMCAwIDE2IDE2aDY0YTE2IDE2IDAgMCAwIDE2LTE2VjY0YTE2IDE2IDAgMCAwLTE2LTE2em0wIDE2MEgxNmExNiAxNiAwIDAgMC0xNiAxNnY2NGExNiAxNiAwIDAgMCAxNiAxNmg2NGExNiAxNiAwIDAgMCAxNi0xNnYtNjRhMTYgMTYgMCAwIDAtMTYtMTZ6bTQxNiAxNzZIMTc2YTE2IDE2IDAgMCAwLTE2IDE2djMyYTE2IDE2IDAgMCAwIDE2IDE2aDMyMGExNiAxNiAwIDAgMCAxNi0xNnYtMzJhMTYgMTYgMCAwIDAtMTYtMTZ6bTAtMzIwSDE3NmExNiAxNiAwIDAgMC0xNiAxNnYzMmExNiAxNiAwIDAgMCAxNiAxNmgzMjBhMTYgMTYgMCAwIDAgMTYtMTZWODBhMTYgMTYgMCAwIDAtMTYtMTZ6bTAgMTYwSDE3NmExNiAxNiAwIDAgMC0xNiAxNnYzMmExNiAxNiAwIDAgMCAxNiAxNmgzMjBhMTYgMTYgMCAwIDAgMTYtMTZ2LTMyYTE2IDE2IDAgMCAwLTE2LTE2eiI+PC9wYXRoPjwvc3ZnPg==); content: ""; float: left; height: 14px; left: -14px; position: relative; top: 5px; width: 14px}#footer-company { padding: 0 50px 0 0}#footer-links { display: flex; flex: 1; flex-direction: column; flex-wrap: wrap; font-size: 15px; max-height: 120px}#footer-links>li { padding: 4px 10px}#footer-logo { max-height: 64px}#footer-socials { font-size: 16px; vertical-align: top; color: gray; display: block; padding: 0 4px}#footer-socials .fab { min-width: 18px; text-align: center; vertical-align: middle}#footer-socials a:hover { color: gray!important}#footer-socials a:hover>.fa-discord { color: #7289da}#footer-socials a:hover>.fa-facebook { color: #4267b2}#footer-socials a:hover>.fa-instagram { color: #405de6}#footer-socials a:hover>.fa-tiktok { color: #000}#footer-socials a:hover>.fa-twitter { color: #1da1f2}#footer-socials a:hover>.fa-youtube { color: red}#mw-content-text>form { width: 100%!important}.branding-box { background: url(https://wiki.hypixel.net/images/hypixel-full.png) no-repeat; background-origin: content-box; background-size: contain; background-position: center; opacity: 1!important; padding: 10px 0; cursor: pointer; height: 100%}.branding-box>a { height: 100%; width: 100%}.branding-box>a>span { color: transparent}.client-nojs .search-box .search:focus { border: none; box-shadow: none}.search-overlay .search-box .search:focus { border: none; box-shadow: none}.toggle-list__toggle,#mw-mf-main-menu-button { border: none; box-shadow: none; outline: none!important}.footer { background-image: linear-gradient(to bottom,rgba(26,26,26,0.92),#1a1a1a),url(https://wiki.hypixel.net/images/artwork.png); background-position: center; background-repeat: no-repeat; background-size: cover; border-top: 1px solid #ddd; color: #fff; margin-top: 60px; padding: 30px 0; user-select: none}.footer a { color: gray!important; text-decoration: none!important; transition: .12s ease-in-out}.footer a:hover { color: #fff!important}.footer-copyright { color: gray; display: block; padding: 0 4px}.footer-inner { display: flex; flex-wrap: wrap; justify-content: space-between; margin: 0 auto; max-width: 1160px; padding: 0!important; width: 65%!important}.header { height: 71px!important; user-select: none}.header-chrome:before { background-image: radial-gradient(farthest-side at top,rgba(255,255,255,0.5),#ffffff),url(https://wiki.hypixel.net/images/artwork.png)!important; background-position: center; background-repeat: no-repeat; background-size: cover; content: ""; height: 72px; left: 0; max-width: 100%!important; position: absolute; width: 100%!important}.last-modified-bar { margin: auto; width: 90%; background-color: #eaecf0!important; border-radius: 4px}.minerva__tab.selected { border-bottom: 2px solid #e7871b!important}.mw-editform .editOptions { margin-top: 20px}.mw-ui-icon-element.cancel { height: 44px; margin: 10px; padding: 0; vertical-align: middle; width: 44px}.mw-ui-icon-element:not(.disabled):hover { background-color: rgba(0,0,0,.1)}.overlay-footer-container { display: none}.overlay.search-overlay.visible { animation-duration: .1s!important}.minerva__tab-container { display: none}.page-actions-menu,#filetoc,.warningbox { border-radius: 4px; margin-bottom: 16px; padding: 0 20px; background-color: #eaecf0; border: 1px solid #c8ccd1}.warningbox { padding: 10px 25px!important}.warningbox,#mw-clearyourcache { margin-bottom: 16px!important}.search { -webkit-appearance: none!important; background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=original&skin=minerva&version=1qbws); background-position: left .8em center!important; background-size: 18px!important; border: 1px solid #fff!important; border-radius: 6px!important; box-shadow: 0 0 10px #bbb!important; box-sizing: border-box!important; color: #666!important; font-family: BlinkMacSystemFont,segoe ui,helvetica,Arial,sans-serif!important; font-size: 14px!important; height: 40px!important; line-height: 1.15!important; max-width: 380px; padding-left: 40px!important; padding-right: 20px!important; transition: border .12s ease-in-out!important; width: 100%!important}.search:focus { outline: 1px solid #ffc376!important}.search-box .search { border-radius: 4px}.content kbd { border-radius: 4px}.content samp { border-radius: 4px}.content code { border-radius: 4px}.content pre { border-radius: 4px}footer { border: none!important}fieldset { margin: 10px 0}#mw-mf-page-left { box-shadow: 0 5px 17px 0 rgba(0,0,0,.24),0 0 1px #a2a9b1!important; position: absolute!important; height: max-content; border-radius: 3px; -webkit-transition: opacity 100ms ease-in-out,-webkit-tap-highlight-color 0s ease-in-out,transform 100ms ease-in-out,visibility 100ms ease-in-out!important; transition: opacity 100ms ease-in-out,-webkit-tap-highlight-color 0s ease-in-out,transform 100ms ease-in-out,visibility 100ms ease-in-out!important; top: 45px!important; left: -12px!important; transform: translate(0,-10px)!important}#mw-mf-page-left li { border: none!important}#mw-mf-page-left li:hover { background-color: #eaecf0!important}#mw-mf-page-left ul { padding-bottom: 0!important}#mw-mf-page-left ul li a { color: #54595d!important}#mw-mf-page-left ul li a:hover { box-shadow: none!important}form.search-box { display: block; width: 100%}input { outline: none}#main-menu-input:checked~#mw-mf-page-left { transform: translate(0,0)!important}.hlist { display: none}.last-modified-bar.active { background-color: #218e47!important}.wikitable>tr>th,.wikitable>tr>td,.wikitable>*>tr>th,.wikitable>*>tr>td { padding: .25em .55em!important}.suggestions { border-radius: 6px!important}.suggestions-result,.suggestions-special { padding: .5em 1em!important}.suggestions-results,.suggestions-special { border-color: #ccc!important}kbd,samp,code,pre,.page-actions-menu,#filetoc,.warningbox,.last-modified-bar { border: 1px solid #333; border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat!important; border-image-width: 35px!important; border-image-outset: 2px!important}@media only screen { .oo-ui-tabOptionWidget { color: #fff!important } .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected { background-color: #212121 } .suggestions-results,.suggestions-special { background-color: #1f1f1f!important; border-color: #333!important } .suggestions-results .special-label,.suggestions-special .special-label { color: #ccc!important } .suggestions-results .suggestions-result,.suggestions-special .suggestions-result,.suggestions-results .special-query,.suggestions-special .special-query { color: #fff!important } .search { color: #ccc!important } html,body,#mw-mf-page-center,#mw-script-doc,#content,.navbox,.navbox-subgroup,.overlay.search-overlay,.oo-ui-tabSelectWidget-framed,.oo-ui-tagMultiselectWidget-handle,.mw-prefs-buttons,.mw-scribunto-message,.mw-scribunto-console-fieldset,.mw-history-compareselectedversions { background-color: transparent!important; color: #fff } .mw-rcfilters-ui-watchlistTopSectionWidget-separator { border-color: #212121!important } .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-content-title,.mw-rcfilters-ui-filterTagMultiselectWidget-emptyFilters { color: #fff!important } .oo-ui-tabSelectWidget-framed { border-bottom-color: transparent } .oo-ui-tagMultiselectWidget-handle,.oo-ui-buttonGroupWidget,.oo-ui-dropdownWidget-handle,.oo-ui-optionWidget,.oo-ui-selectWidget,.oo-ui-optionWidget-selected { background-color: #1a1a1a!important; color: #fff!important; border-color: #212121!important } .oo-ui-optionWidget-highlighted { background-color: #212121!important } .oo-ui-optionWidget-selected { background-color: #1f1f1f!important } input,select,.oo-ui-buttonElement-button,#mw-scribunto-input,.diff-context { color: #fff!important; background-color: #1f1f1f!important; border: 1px solid #333!important } legend { color: #aaa } .content .mw-parser-output>h2 { border-bottom: 2px solid #333 } .content .mw-parser-output>h3 { border-bottom: 1px solid #333; margin-bottom: .5em } .content .section-heading { border-bottom: 1px solid #aaa } .content kbd,.content samp,.content code,.content pre,.content .toc,.content .infobox { background-color: #1f1f1f!important; border-color: #333!important } .content .infobox td { border-color: #333!important } .infobox tr { color: #fff!important } table.wikitable>tr>th,table.wikitable>tr>td { background-color: #212121; border-color: #333!important } table.wikitable>tr>th { background-color: #2b2b2b } table.wikitable>tr:nth-child(odd)>td { background: #2b2b2b } table.wikitable>*>tr>th,table.wikitable>*>tr>td { background-color: #212121; border-color: #333!important } table.wikitable>*>tr>th { background-color: #2b2b2b } table.wikitable>*>tr:nth-child(odd)>td { background: #2b2b2b } .mw-datatable>tr>th,.mw_metadata>tr>th,.mw-datatable>tr>td,.mw_metadata>tr>td { background-color: #212121!important; border-color: #333!important } .mw-datatable>tr>th,.mw_metadata>tr>th { background-color: #2b2b2b!important } .mw-datatable>*>tr>th,.mw_metadata>*>tr>th,.mw-datatable>*>tr>td,.mw_metadata>*>tr>td { background-color: #212121!important; border-color: #333!important } .mw-datatable>*>tr>th,.mw_metadata>*>tr>th { background-color: #2b2b2b!important } .footer { background-image: linear-gradient(to bottom,rgba(26,26,26,0.85),#1a1a1a),url(https://wiki.hypixel.net/images/artwork.png); border-top: 1px solid #1a1a1a } .header-chrome:before { background-image: radial-gradient(farthest-side at top,rgba(26,26,26,0.5),#1a1a1a),url(https://wiki.hypixel.net/images/artwork.png)!important } .oo-ui-iconElement-icon,.oo-ui-indicatorElement-indicator { filter: invert(1) hue-rotate(180deg) brightness(1.2) } .mw-ui-icon:not(.mw-ui-icon-wikimedia-history-invert):before { filter: invert(1) hue-rotate(180deg) brightness(1.2) } .mw-ui-icon:not(.mw-ui-icon-mf-expand-invert):before { filter: invert(1) hue-rotate(180deg) brightness(1.2) } .last-modified-bar { background-color: #1f1f1f!important } .last-modified-bar .last-modified-bar__text { color: #fff!important } .oo-ui-panelLayout-framed { background-color: #1f1f1f!important } .minerva__tab { color: #aaa!important } .mw-ui-icon-with-label-desktop:hover,.mw-ui-icon-with-label-desktop:focus,.mw-ui-icon-with-label-desktop:active,.mw-ui-icon-with-label-desktop:visited { color: #aaa!important } .page-heading>h1,.page-heading>.tagline { color: #fff!important } .toggle-list__list { color: #fff!important; background-color: #1f1f1f!important; box-shadow: 0 5px 17px 0 rgba(0,0,0,.24),0 0 1px #000!important; border: 1px solid #333 } .search { box-shadow: 0 0 10px #1f1f1f!important } .search,.page-actions-menu,#filetoc,.warningbox { background-color: #1f1f1f!important; border-color: #333!important } .toggle-list-item:hover { background: #000; color: #fff } .blocks-item-description,.mw-mf-user { color: #fff!important } .blocks-item { box-shadow: 0 2px 15px rgba(35,35,35,.5)!important; border: 1px solid #333!important; background-color: #212121 } .mw-ui-button { background-color: #1f1f1f!important; border: 1px solid #333!important; color: #fff!important } .mw-ui-button:hover { background-color: #212121!important } .mw-history-undo a,.mw-rollback-link a { background-color: #1f1f1f!important; border: 1px solid #333!important; color: #fff!important } .mw-history-undo a:hover,.mw-rollback-link a:hover { background-color: #212121!important } .toggle-list-item__label { color: #aaa!important } .page-list .info,.page-list .component { color: #aaa!important } .page-list li { border-color: #333!important } .topic-title-list .info,.topic-title-list .component { color: #aaa!important } .topic-title-list li { border-color: #333!important } .site-link-list .info,.site-link-list .component { color: #aaa!important } .site-link-list li { border-color: #333!important } .page-list.side-list .list-thumb { color: #aaa!important } .topic-title-list.side-list .list-thumb { color: #aaa!important } .site-link-list.side-list .list-thumb { color: #aaa!important } ul.mw-contributions-list li { border-color: #1f1f1f!important } ul.special li { border-color: #1f1f1f!important } .ns-special .content-header { border-color: #1f1f1f!important } .mw-prefs-buttons { border-color: #1f1f1f!important } #mw-mf-page-left { box-shadow: 0 5px 17px 0 rgba(0,0,0,.24),0 0 1px #000!important } #mw-mf-page-left ul li { background-color: #1f1f1f!important; color: #fff!important } #mw-mf-page-left ul li a { color: #aaa!important } #mw-mf-page-left li:hover { background-color: #000!important } .mw-ui-icon-element:not(.disabled):hover { background-color: rgba(0,0,0,.4) }}@media only screen and (min-width: 720px) { .header .branding-box { width:auto!important; min-width: 82px } .overlay.search-overlay .overlay-title { padding-left: 236px!important; width: 380px!important } #page-actions a { color: #fff!important } #page-actions label { color: #fff!important }}@media only screen and (max-width: 720px) { #footer-company { padding:0 0 30px; text-align: center; width: 100% } #footer-links { max-height: 100%; text-align: center } .header-chrome:before { background-image: linear-gradient(to bottom,rgba(255,255,255,0.5),#ffffff),url(https://wiki.hypixel.net/images/artwork.png)!important; height: 170px!important } .last-modified-bar { margin: 0 16px } .header-chrome:before { background-image: linear-gradient(to bottom,rgba(26,26,26,0.5),#1a1a1a),url(https://wiki.hypixel.net/images/artwork.png)!important }}@media only screen and (min-width: 1000px) { .footer-inner { padding:0; width: 90% }}@media only screen and (max-width: 1000px) { #footer-links { max-width:100% } .footer-inner { padding: 0 5%!important; width: calc(90%)!important }}.infobox { border: 15px solid #232445!important; border-image: url(https://wiki.hypixel.net/images/hypixel/borders/square_border.png) 1000 1000 repeat!important; border-image-width: 100px!important; border-image-outset: 2px!important; border-collapse: separate!important}.infobox { background-color: #f2f2f2; border-collapse: collapse; clear: both; display: table!important; float: right; margin: 0!important; margin-left: 20px!important; width: 320px; margin-bottom: 15px!important; table-layout: fixed}.infobox table { border-collapse: inherit!important}.infobox img { display: block; margin: 20px auto; max-width: 150px; height: auto}.infobox td { border-top: 1px solid #c7c7c7; padding: 2px 8px; text-align: right}.infobox td:first-of-type { font-weight: 700; text-align: left}.infobox td:last-child { float: right; width: 100%; text-align: right}.infobox tr:first-of-type>th { font-size: 16px; font-weight: 700; padding: 10px 0; text-align: center}.infobox.minor { border-image-width: 0 100px 100px 100px!important; border-width: 0 15px 15px!important; margin-top: -15px!important}.infobox tr:first-of-type>td { border-top: none}.mw-parser-output .infobox:last-of-type { margin-bottom: 15px}span.color-divine,span.color-light_blue,span.color-aqua { color: #5ff!important}span.color-black { color: #000!important}span.color-rare,span.color-blue { color: #55f!important}span.color-dark_aqua { color: #0aa!important}span.color-dark_blue { color: #00a!important}span.color-dark_gray { color: #555!important}span.color-dark_green { color: #0a0!important}span.color-epic,span.color-dark_purple { color: #a0a!important}span.color-dark_red { color: #a00!important}span.color-legendary,span.color-orange,span.color-gold { color: #fa0!important}span.color-gray { color: #aaa!important}span.color-uncommon,span.color-green { color: #5f5!important}span.color-pink,span.color-mythic,span.color-light_purple { color: #f5f!important}span.color-supreme,span.color-special,span.color-very-special,span.color-red { color: #f55!important}span.color-common,span.color-white { color: #fff!important}span.color-yellow { color: #ff5!important}.tabber__header__prev:after,.tabber__header__next:after { filter: invert(1)}:not(.infobox) .tabber__tab--active { background-color: rgba(51,102,204,.2)}:not(.infobox) .tabber__panel,:not(.infobox) .tabber__header { background-color: #1f1f1f; border: 1px solid #333}:not(.infobox) .tabber__panel { padding: 1em!important}:not(.infobox) .tabber__panel h1,:not(.infobox) .tabber__panel h2,:not(.infobox) .tabber__panel h3 { margin-top: 0}.diff-addedline .diffchange { background: #0083ff}.codeEditor-status { color: #000!important}#toctogglecheckbox:not(:checked)+.toctitle { border-bottom: 1px solid #333; margin-bottom: 10px}a.new { color: #d33!important}.contributionscores { width: 100%}.contributionscores td { text-align: center!important}.contributionscores .header { display: table-row}.contributionscores .content { width: auto}.wikiEditor-ui-toolbar { background-color: #1f1f1f!important}.wikiEditor-ui-toolbar .label:after { filter: invert(1) hue-rotate(180deg) brightness(1.2)}.wikiEditor-ui-toolbar .tabs .tab a::before { filter: invert(1) hue-rotate(180deg) brightness(1.2)}.wikiEditor-ui .wikiEditor-ui-view { border: 1px solid #54595d}.wikiEditor-ui-toolbar { box-shadow: 0 10px 9px 0 rgba(0,0,0,.1)}.wikiEditor-ui-toolbar .sections .section { border-top: none}.wikiEditor-ui-toolbar .group { border-right: none; border-left: none}.tabber__panel { overflow: visible}:not(.tabber__panel--active).tabber__panel { display: none}.tabber__section { height: auto!important; overflow: visible}.infobox td { font-size: 13px}.minecraft-inventory td { font-size: 15px!important}.content { padding: 0}.tabber__tab--active,.tabber__tab--active:visited { box-shadow: inset 0 -2px 0 0 #ffc376; border-width: 0 1px; background-color: rgba(255,195,118,.1)!important; font-weight: 700}.tabber__tab--active a:active,.tabber__tab a:visited { color: #ffc376!important}.tabber__tab:hover { box-shadow: inset 0 -2px 0 0 #ffc376; color: #ffc376; filter: brightness(1.5)}.tabber__tab a:active,.tabber__tab a:visited { color: #bdbcb9!important}.tabber__tabs { box-shadow: none!important}.tabber__tabs a:first-of-type { border-left: none}.tabber__tab { color: #36c; line-height: 30px; font-weight: 400}.tabber { margin-bottom: 5px}#mw-mf-page-left ul { list-style-type: none; padding-left: 0}#mw-mf-page-left li { margin-bottom: 0}#mw-mf-page-left ul li a { color: #aaa!important}#mw-mf-main-menu-button:hover+#mw-mf-page-left,#mw-mf-page-left:hover { visibility: visible}.mw-hypixel-right ul { padding-left: 0}.mw-hypixel-right li { margin-bottom: 0}.mw-hypixel-right a { text-decoration: none}table.mw-collapsible :first-child tr:first-child th:last-child::before { color: #ffc376!important}.infobox.minor img,.remove-img-span img { display: inline!important; margin: 0!important}.infobox.minor tr:first-of-type>th { padding: 7px; border-bottom: 1px solid #333!important}.infobox.minor tr:nth-of-type(2)>td { border-top: none}.occupants-minor,.resources-minor { text-align: left!important; font-weight: 400; padding: 5px 0 0!important}.occupants-minor:first-of-type,.resources-minor:first-of-type { border-right: 1px solid #333!important}.occupants-minor li,.resources-minor li,.materials-minor li { margin-bottom: 0!important}.occupants-minor ul,.resources-minor ul,.materials-minor ul { list-style: none!important; padding: 7px!important; font-weight: 400!important}.color-wheel-minor { border-radius: 50px; border-style: solid; border-width: 30px; height: 0; width: 0; transform: rotate(45deg)}.loot-drops-minor li { list-style-type: none; margin-bottom: 0}.gemstone-slot-minor { text-align: center!important; padding: 5px}.upgrades-low-minor { text-align: center!important; font-weight: 400!important; border-right: 1px solid #333!important}.upgrades-right-minor { padding: 2px!important; padding-top: 5px!important; text-align: center!important}.upgrades-text-minor { font-size: 15px!important; font-weight: 700!important}.attributes-minor { text-align: center!important; font-weight: 400!important; border-right: 1px #333 solid!important}.attributes-text-minor { font-size: 13px!important; font-weight: 700!important}.container-navbox { max-width: 100%; height: auto; padding: 6px; font-size: 15px; background-color: #1f1f1f; border: 1px solid #c8ccd1; border-color: #333!important; border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat!important; border-image-width: 35px!important; border-image-outset: 2px!important; clear: both}.container-navbox-header { width: auto; height: 35px; padding: 10px; border-bottom: 2px solid #333; text-align: center; display: flex; flex-direction: row; align-items: center; justify-content: space-between; font-size: 18px; vertical-align: middle}.container-navbox-header p { margin: 0!important}.container-navbox-section { max-width: 100%; height: auto; border-bottom: 2px solid #333; display: flex; flex-direction: row; background-color: #1f1f1f; column-gap: 5px}.container-navbox-section:last-child { border-bottom: none}.container-navbox-group-header { width: 200px; max-height: 100%; padding: 1em; display: flex; align-items: center; background-color: #1f1f1f; font-weight: 700; white-space: pre-wrap; column-gap: 10px}.container-navbox-group { width: 100%; padding: 15px 1em}.container-navbox-group ul { columns: 220px auto}.container-navbox-group ul li { margin-bottom: 5px}.dropdown:hover .dropdown-content { visibility: visible; opacity: 1}blockquote { font-family: Raleway,helvetica,serif!important}.cata-image-loot-tabber * .tabber__tabs a::before { content: ""; width: 35px; height: 45px; background-position: center; background-repeat: no-repeat; background-size: cover}.cata-image-loot-tabber * .tabber__tabs a:nth-child(1)::before { background-image: url(https://wiki.hypixel.net/images/a/a8/SkyBlock_furniture_wood_chest_plus.png)}.cata-image-loot-tabber * .tabber__tabs a:nth-child(2)::before { background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_gold_chest_plus.png)}.cata-image-loot-tabber * .tabber__tabs a:nth-child(3)::before { background-image: url(https://wiki.hypixel.net/images/e/e9/SkyBlock_furniture_diamond_chest_plus.png)}.cata-image-loot-tabber * .tabber__tabs a:nth-child(4)::before { background-image: url(https://wiki.hypixel.net/images/8/82/SkyBlock_furniture_emerald_chest_plus.png)}.cata-image-loot-tabber * .tabber__tabs a:nth-child(5)::before { background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_ender_chest_plus.png)}.cata-image-loot-tabber * .tabber__tabs a:nth-child(6)::before { background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_ender_chest_plus.png)}.boss-quote-table-quote { font-family: sans,serif; font-size: 40px; font-weight: 700; color: #f55; padding: 16px 10px; line-height: .5}.toc>ul { margin: 0 5em 0 32px!important}.toctogglecheckbox~ul { display: none}.toctogglecheckbox:not(:checked)~ul { display: block}.dialogue-headine { padding: .5em 0; line-height: 1.3; word-wrap: break-word; word-break: break-word; font-weight: 700}.content code { padding: .1em .4em}code { border-image: none!important}.mw-parser-output { display: inline-block; width: 100%; max-width: 100%}@media(min-width: 1000px) { .header-container.header-chrome { position:fixed; z-index: 2; width: 100%; top: 0; padding: 0!important } .header-container.header-chrome:before { box-shadow: 0 0 20px 10px #1a1a1a } #mw-mf-page-center,#mw-mf-page-center::before { top: 100px!important } .minerva-user-menu-list { top: 60px }}@media(max-width: 1000px) { .hypixel-site-navigation .toggle-list__toggle { padding-left:0!important; padding-right: 0!important } #hypixel-site-navigation-wrapper { padding: 0 .75em }}@media(max-width: 720px) { .header { flex-wrap:wrap!important; height: auto!important; justify-content: space-around!important } #hypixel-site-navigation-wrapper { order: 3; flex-wrap: wrap!important; row-gap: 15px; justify-content: space-around } #hypixel-site-navigation-wrapper .toggle-list__list { left: 0!important; width: 100%!important } .branding-box { width: 80px; height: 40px } .search-box { width: 100%!important; left: 0!important }}.main-menu-mask { display: none!important}#hypixel-site-navigation-wrapper { display: flex; flex-wrap: nowrap}.hypixel-site-navigation { color: #fff!important; text-shadow: 1px 1px rgba(0,0,0,.5)}.hypixel-site-navigation a { color: inherit!important}.hypixel-site-navigation .toggle-list__toggle { padding: .75em}.hypixel-site-navigation .toggle-list__toggle:hover { background-color: rgba(0,0,0,.4)}.hypixel-site-navigation .toggle-list__list { top: 100%; min-width: 200px}.hypixel-site-navigation .toggle-list__list .toggle-list-item .toggle-list-item__anchor { min-height: 20px}.toggle-list__list,.minerva-user-menu-list { border-radius: 3px}.minerva-user-navigation { width: auto!important; min-width: revert!important}.header { display: flex; justify-content: space-between; align-content: center; align-items: center; flex-direction: row; flex-wrap: nowrap}.hypixel-site-navigation>label::after { content: ""; background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+ZXhwYW5kPC90aXRsZT48ZyBmaWxsPSIjYTJhOWIxIj48cGF0aCBkPSJNMTcuNSA0Ljc1bC03LjUgNy41LTcuNS03LjVMMSA2LjI1bDkgOSA5LTl6Ii8+PC9nPjwvc3ZnPg==); display: inline-block; vertical-align: middle; min-width: 1em; min-height: 1em; padding: 0 0 0 20px; background-repeat: no-repeat; background-size: 1em 1em; background-position: center}#mw-mf-page-left ul li a span,.toggle-list-item__label { color: #fff!important}.mw-ui-icon-wikimedia-flag-ltr-base20:before { background-image: url(https://wiki.hypixel.net/resources/lib/ooui/themes/wikimediaui/images/icons/flag-ltr.svg)}.mw-ui-icon-wikimedia-articleRedirect-ltr-base20:before { background-image: url(https://wiki.hypixel.net/resources/lib/ooui/themes/wikimediaui/images/icons/articleRedirect-ltr.svg)}@media(max-width: 720px) { table.infobox { display:table!important } table.wikitable { display: block!important }}table.infobox { display: revert!important}.infobox ul { list-style: none}#userloginForm .mw-userlogin-rememberme { display: block!important}.mw-hp-tree { color: #5f5; margin-left: 20px}.mw-hp-tree li { margin-bottom: 0; list-style-type: disc}.mw-hp-tree li::marker { color: #fff}.mw-hp-tree ul:first-of-type { margin-top: 6px}.mw-hp-tree ul:last-of-type { margin-bottom: 6px}.mw-hp-tree-container { margin-left: 5px}.mw-hp-tree-text::after { content: "Expand"; color: #ba91ff; display: inline-block}.mw-hp-tree-text-down::after { content: "Collapse"; color: #7698ff; display: inline-block}.mw-hp-tree-anchor { cursor: pointer; user-select: none}.mw-hp-tree-nested { display: none}.mw-hp-tree-active { display: block}.mw-display-qrcode { border: 2px solid #fff}.mw-overlays-container .search-overlay { top: 71px}.mw-overlays-container .search-overlay .search-content,.mw-overlays-container .search-overlay .results { margin-left: 0!important}.mw-overlays-container .search-overlay .search-content { z-index: 4; position: relative; border: none!important}.mw-overlays-container .search-overlay .overlay-content { padding-top: 0!important; z-index: 3}.mw-overlays-container .search-overlay .overlay-header { flex-wrap: nowrap!important}.mw-overlays-container .search-overlay .overlay-title { padding-right: 15px}.mw-overlays-container .search-overlay .search { max-width: unset!important}.mw-overlays-container .search-overlay .clear { right: 5px!important}.mw-overlays-container .search-overlay .results { position: relative; box-shadow: none!important; background: 0 0!important}.mw-overlays-container .search-overlay .results ul>li { color: #fff; background: #1f1f1f; border: 1px solid #333!important; border-radius: 6px; margin: 5px 0; box-shadow: 0 0 10px #1f1f1f!important}.mw-overlays-container .search-overlay .results .list-thumb { background-color: #212121; border-radius: 6px}.mw-overlays-container .search-overlay .results .page-summary h2,.mw-overlays-container .search-overlay .results .page-summary h3 { color: #fff}@media(min-width: 720px) { .overlay-content { padding-left:236px!important } .overlay-header-container { z-index: 4!important } .search-content,.results { width: 380px!important }}@media(max-width: 720px) { div.overlay-header-container { position:relative!important; top: -71px!important } .overlay-content { padding: 0 15px } .search-content,.results { width: 100%!important }}table.sortable .headerSort { padding-right: 21px!important; position: relative}table.sortable .headerSort:after { background-image: inherit; content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-repeat: no-repeat; background-position: center right; filter: invert(100%); pointer-events: none}.warningbox>p { color: #fff; margin: .5em 0}.suggestions-special { border-radius: 6px}.mw-dismissable-notice { background-color: #1f1f1f; border-radius: 8px; border: 1px solid #333; border-image-width: 35px!important; border-image-outset: 2px!important}.mw-dismissable-notice { position: fixed; display: block; bottom: 25px; z-index: 6; width: 100%; max-width: 92%!important; box-shadow: 0 -5px 30px 20px rgba(0,0,0,.3); margin: 0!important; left: 50%; transform: translateX(-50%)}.mw-dismissable-notice-body { padding: 20px; margin: 0!important}.mw-dismissable-notice-close { padding: 20px}.banner-container { position: relative}.warningbox { color: #fff!important}#content { position: relative; z-index: 1; background-color: transparent!important}div#mw-mf-page-center::before { content: ""; position: fixed; top: 0; bottom: 0; right: 0; height: 100%; width: 100%; background-image: linear-gradient(#1a1a1a,transparent),url(https://wiki.hypixel.net/images/hypixel/background.png); background-image: linear-gradient(#1a1a1a,transparent),image-set(url(https://wiki.hypixel.net/images/hypixel/background.png) 1x,url(https://wiki.hypixel.net/images/hypixel/background-large.png) 2x); background-attachment: fixed; background-color: #1a1a1a; background-position: center; background-repeat: no-repeat; background-size: cover; opacity: .075; z-index: 0; pointer-events: none}.page-Main_Page #wrapper #content { background: 0 0!important}.last-modified-bar,.footer { position: relative}.last-modified-bar a,.last-modified-bar a:visited { color: #fff}.overlay { z-index: 2!important}.mwe-math-element { overflow: auto; display: block}#page-secondary-actions { display: none}.loot-drops-minor li { margin-bottom: 0!important}.warningbox { color: #fff}.warningbox>p { margin: .5em 0!important; font-size: 17px}.toctitle>.mw-ui-icon-minerva-listBullet { display: none}.infobox img { max-width: 100%!important}.hp-loottable td { border: 2px solid #1a1a1a!important}.hp-loottable td:last-child { color: #5f5}.is-affected-by-mf { outline: dotted 3px transparent; outline-offset: -1px; outline-color: #5ff}.is-affected-by-pl { outline: dotted 3px transparent; outline-offset: -1px; outline-color: #f5f}.is-affected-by-mf.is-affected-by-pl { outline-color: #b591b7!important}.cata-image-loot-tabber * .tabber__tabs a:nth-child(1)::before { background-image: url(https://wiki.hypixel.net/images/b/b9/SkyBlock_furniture_dungeon_wood_reward_chest.png); height: 65px}.cata-image-loot-tabber * .tabber__tabs a:nth-child(2)::before { background-image: url(https://wiki.hypixel.net/images/8/85/SkyBlock_furniture_dungeon_gold_reward_chest.png); height: 65px}.cata-image-loot-tabber * .tabber__tabs a:nth-child(3)::before { background-image: url(https://wiki.hypixel.net/images/9/98/SkyBlock_furniture_dungeon_diamond_reward_chest.png); height: 65px; width: 40px}.cata-image-loot-tabber * .tabber__tabs a:nth-child(4)::before { background-image: url(https://wiki.hypixel.net/images/e/e4/SkyBlock_furniture_dungeon_emerald_reward_chest.png); height: 65px; width: 40px}.cata-image-loot-tabber * .tabber__tabs a:nth-child(5)::before { background-image: url(https://wiki.hypixel.net/images/4/40/SkyBlock_furniture_dungeon_obsidian_reward_chest.png); height: 65px; width: 50px}.cata-image-loot-tabber * .tabber__tabs a:nth-child(6)::before { background-image: url(https://wiki.hypixel.net/images/8/87/SkyBlock_furniture_dungeon_bedrock_reward_chest.png); height: 65px; width: 55px}.diff-deletedline .diffchange { background: #988e78!important}.hide { display: none}.page-notif-box { border: 2px solid #333!important; border-left-width: 10px!important; border-radius: 6px; border-collapse: separate!important; width: 75%; background-color: #1f1f1f!important; box-shadow: 0 0 10px #1f1f1f!important; display: flex; margin: auto!important; color: #fff; font-weight: 700; margin-top: 25px!important; margin-bottom: 25px!important}.page-notif-box tr>td { border: none; padding: .25em .9em}.page-notif-box img { max-width: revert!important; flex-shrink: 0}.page-notif-box-updating,.page-notif-box-changed { border-color: #e7871b!important}.page-notif-box-no-obtain,.page-notif-box-cannot-obtain { border-color: #e30000!important}.page-notif-box-alpha { border-color: #0d6f67!important}.hp-input { height: 35px; width: 100%; border: none!important}.dungeon-calc-container td,.loot-calc-container td { border: 2px solid #1a1a1a}.dungeon-calc-button,.loot-calc-button { cursor: pointer; vertical-align: bottom; background-color: #3f7dfb!important; transition-duration: .35s; padding: 5px!important}.dungeon-calc-button:hover,.loot-calc-button:hover { background-color: #5e93fe!important}.hp-loottable td:last-child { color: #5f5}.dungeon-loottable td:last-child { color: #5f5}.listspacing li { margin-bottom: 0!important}.listspacing li:last-child { margin-bottom: 1em!important}.listdisplay li { display: inline!important}.categoryboxcontainer { max-width: 100%; height: 35px; background-color: #1f1f1f; border: 1px solid #333; padding: 3px; font-size: 15px; clear: both}.categoryboxcontainer li { display: inline-block; padding-left: 5px; padding-right: 5px; line-height: 35px}.categoryboxcontainer li:first-child { padding-left: 0; border-left: none}.categoryboxcontainer li:nth-child(2) { border-left: none}.categoryboxcontainer li:empty { display: none}.tooltiptemp { position: relative!important; display: inline-block!important; text-decoration: underline dotted; cursor: help}.tooltiptemp .tooltiptexttemp { visibility: hidden; width: 240px; background-color: #000; color: #fff; text-align: center; border: 1px #333 solid; border-radius: 6px; padding: 5px 0; position: absolute; z-index: 1; bottom: 100%!important; left: 50%!important; margin-left: -120px!important; opacity: 0; transition: opacity 1s}.tooltiptemp .tooltiptexttemp::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: #000 transparent transparent transparent}.tooltiptemp:hover .tooltiptexttemp { visibility: visible; opacity: 1}.tooltiptemp p { margin: 0}.raw-mctooltip { position: relative!important; display: inline-block!important; font-weight: 400}.raw-mctooltip:hover .raw-mctooltiptext { display: inline}.raw-mctooltiptext { display: none; font-family: minecraft,helvetica,serif; margin: 0}.content .mw-parser-output>h2 { padding: .25em 0; font-size: 1.8em; margin-top: 35px}.content .mw-parser-output>h2,.content .mw-parser-output>h3 { text-transform: uppercase; font-weight: 400}.heading-holder { padding: 0!important}.mw-body-content blockquote { background-color: #212121; border-radius: 6px; border: 1px solid #333!important; border-left-width: 5px!important; display: table}.tabber__tab { font-weight: 400!important; column-gap: 10px}.tabber__header .tabber__tab:not(.tabber__tab--active) { color: #fff}.mw-collapsible-toggle { padding-left: 5px}.tabber__header,.tabber__section,.tabber__panel { scroll-snap-type: none!important; overscroll-behavior: none!important; scroll-snap-align: none!important; overflow: hidden!important}.mw-userlogin-help { display: none}@media(min-width: 720px) { .header .branding-box { max-height:55px }}@font-face { font-family: minecraft; src: url(https://wiki.hypixel.net/fonts/minecraft.woff) format("woff")}.minecraft-inventory { -moz-user-select: none; -ms-user-select: none; -webkit-user-select: none; background-color: #c6c6c6; border: 4px solid; border-color: #fff #555 #555 #fff; border-radius: 4px; box-shadow: 0 0 0 1px #000; color: #404040; display: inline-block; font-family: minecraft,serif; font-size: 15px; font-weight: 400; padding: 2px 6px 6px; user-select: none; margin: 10px 0}.minecraft-inventory table { border-collapse: separate; margin: 0!important}.minecraft-inventory td { background: #8b8b8b no-repeat center center/32px 32px; border: 2px solid; border-color: #373737 #fff #fff #373737; box-sizing: border-box; padding: 0; position: relative; width: 36px}.minecraft-inventory td>.external { background: 0 0; padding: 0}.minecraft-inventory td>a:hover { text-decoration: none}.minecraft-inventory td:hover:after { background: #fff; content: ""; float: left; height: 100%; left: 0; opacity: .5; pointer-events: none; position: absolute; top: 0; width: 100%}.minecraft-inventory td:hover .mctooltip { display: block}.minecraft-inventory>span { padding: 2px}.minecraft-inventory tr { height: 36px}.minecraft-inventory .enchanted::before { content: ""; height: 32px; left: 0; position: absolute; top: 0; width: 32px; background-image: url(https://wiki.hypixel.net/images/minecraft/glint.webp); mix-blend-mode: color-dodge}.minecraft-inventory .enchanted::after { content: ""; height: 32px; left: 0; position: absolute; top: 0; width: 32px; background-image: url(https://wiki.hypixel.net/images/minecraft/item-spritesheet_cutout.png); background-position: inherit}.minecraft-inventory .amount { margin: 0; position: relative; z-index: 999}.minecraft-inventory .sbsprite { background-repeat: no-repeat; color: #fff; direction: rtl; display: block; text-shadow: 2px 2px #3f3f3f; background-image: url(https://wiki.hypixel.net/images/skyblock/item-spritesheet.png); height: 22px; line-height: 44px; margin: 0 5px; text-indent: -8px; width: 22px}.minecraft-inventory .mcsprite { background-repeat: no-repeat; color: #fff; direction: rtl; display: block; text-shadow: 2px 2px #3f3f3f; background-image: url(https://wiki.hypixel.net/images/minecraft/item-spritesheet.png); height: 32px; line-height: 54px; text-indent: -2px; width: 32px}.minecraft-inventory .sbpet { background-repeat: no-repeat; color: #fff; direction: rtl; display: block; text-shadow: 2px 2px #3f3f3f; background-image: url(https://wiki.hypixel.net/images/skyblock/pet-spritesheet.png); height: 22px; line-height: 44px; margin: 0 6px; text-indent: -8px; width: 20px}.mctooltip { background: rgba(16,0,16,.93); border: 2px solid; border-image: linear-gradient(to bottom,rgba(80,0,255,0.31),rgba(40,0,127,0.31)); border-image-slice: 1; border-radius: 4px; box-shadow: 0 0 0 2px rgba(16,0,16,.93); display: none; line-height: 18px; margin-left: 15px; margin-top: -30px; padding: 4px 4px 3px; position: fixed; text-indent: initial; text-shadow: 2px 2px #3f3f3f; z-index: 9999}.mctooltip>span { direction: ltr; display: block; white-space: nowrap; text-align: left}.mctooltip>span:nth-child(1):not(:last-child) { padding-bottom: 5px}.mctooltip>span:nth-child(n+2) { float: left}.mctooltip>span:nth-child(n+2):not(:last-child) { padding-right: 4px}.mctooltip>span.inline { display: inline-block!important}.mctooltip .rarity-divine { color: #5ff}.mctooltip .rarity-rare { color: #55f; text-shadow: 2px 2px #15153f}.mctooltip .rarity-epic { color: #a0a; text-shadow: 2px 2px #2a002a}.mctooltip .rarity-supreme { color: #a00; text-shadow: 2px 2px #2a0000}.mctooltip .rarity-legendary { color: #fa0; text-shadow: 2px 2px #2a2a00}.mctooltip .rarity-uncommon { color: #5f5; text-shadow: 2px 2px #153f15}.mctooltip .rarity-mythic { color: #f5f; text-shadow: 2px 2px #3f153f}.mctooltip .rarity-veryspecial { color: #f55; text-shadow: 2px 2px #3f1515}.mctooltip .rarity-special { color: #f55; text-shadow: 2px 2px #3f1515}.mctooltip .color-aqua { text-shadow: 2px 2px #153f3f}.mctooltip .color-black { text-shadow: 2px 2px #000}.mctooltip .color-blue { text-shadow: 2px 2px #15153f}.mctooltip .color-dark_aqua { text-shadow: 2px 2px #002a2a}.mctooltip .color-dark_blue { text-shadow: 2px 2px #00002a}.mctooltip .color-dark_gray { text-shadow: 2px 2px #151515}.mctooltip .color-dark_green { text-shadow: 2px 2px #002a00}.mctooltip .color-dark_purple { text-shadow: 2px 2px #2a002a}.mctooltip .color-dark_red { text-shadow: 2px 2px #2a0000}.mctooltip .color-gold { text-shadow: 2px 2px #2a2a00}.mctooltip .color-gray { text-shadow: 2px 2px #2a2a2a}.mctooltip .color-green { text-shadow: 2px 2px #153f15}.mctooltip .color-light_purple { text-shadow: 2px 2px #3f153f}.mctooltip .color-red { text-shadow: 2px 2px #3f1515}.mctooltip .color-white { text-shadow: 2px 2px #3f3f3f}.mctooltip .color-yellow { text-shadow: 2px 2px #3f3f15}.color-aqua { color: #5ff}.color-black { color: #000}.color-blue { color: #55f}.color-dark_aqua { color: #0aa}.color-dark_blue { color: #00a}.color-dark_gray { color: #555}.color-dark_green { color: #0a0}.color-dark_purple { color: #a0a}.color-dark_red { color: #a00}.color-gold { color: #fa0}.color-gray { color: #aaa}.color-green { color: #5f5}.color-light_purple { color: #f5f}.color-red { color: #f55}.color-white { color: #fff}.color-yellow { color: #ff5}.mcentity { background-image: url(https://wiki.hypixel.net/images/minecraft/entity-spritesheet.png); height: 16px; width: 16px}.mcblock { background-image: url(https://wiki.hypixel.net/images/minecraft/block-spritesheet.png); height: 16px; width: 16px}.sbspray { background-image: url(https://wiki.hypixel.net/images/skyblock/spray-spritesheet.png); height: 128px; width: 128px}.sbnpc { background-image: url(https://wiki.hypixel.net/images/skyblock/npc-spritesheet.png); height: 120px; width: 270px}.sbnpc-_56ms { background-position: 0 0}.sbnpc-adventurer { background-position: -120px 0}.sbnpc-agents { background-position: -240px 0}.sbnpc-anita { background-position: -360px 0}.sbnpc-archeologist { background-position: -480px 0}.sbnpc-armorsmith { background-position: -600px 0}.sbnpc-arthur { background-position: -720px 0}.sbnpc-artist { background-position: -840px 0}.sbnpc-artist_2 { background-position: -960px 0}.sbnpc-auction_agent_0 { background-position: -1080px 0}.sbnpc-auction_agent_1 { background-position: -1200px 0}.sbnpc-auction_agent_2 { background-position: -1320px 0}.sbnpc-auction_agent_3 { background-position: -1440px 0}.sbnpc-auction_master { background-position: -1560px 0}.sbnpc-baker { background-position: -1680px 0}.sbnpc-banker { background-position: -1800px 0}.sbnpc-bartender { background-position: -1920px 0}.sbnpc-bazaar { background-position: -2040px 0}.sbnpc-bazaar_assistant { background-position: -2160px 0}.sbnpc-beekeeper { background-position: -2280px 0}.sbnpc-bestiary { background-position: -2400px 0}.sbnpc-beth { background-position: -2520px 0}.sbnpc-blue_shark { background-position: -2640px 0}.sbnpc-bodyguard_1 { background-position: -2760px 0}.sbnpc-bodyguard_2 { background-position: 0 -270px}.sbnpc-bonzo { background-position: -120px -270px}.sbnpc-bonzo_summon_0 { background-position: -240px -270px}.sbnpc-bonzo_summon_1 { background-position: -360px -270px}.sbnpc-bonzo_summon_2 { background-position: -480px -270px}.sbnpc-bonzo_undead { background-position: -600px -270px}.sbnpc-builder { background-position: -720px -270px}.sbnpc-candidate { background-position: -840px -270px}.sbnpc-cannibal_undead { background-position: -960px -270px}.sbnpc-carpenter { background-position: -1080px -270px}.sbnpc-catacombs_blacksmith { background-position: -1200px -270px}.sbnpc-century_simon { background-position: -1320px -270px}.sbnpc-charlie { background-position: -1440px -270px}.sbnpc-clerk_election { background-position: -1560px -270px}.sbnpc-community_shop { background-position: -1680px -270px}.sbnpc-crypt_dreadlord { background-position: -1800px -270px}.sbnpc-crypt_souleater { background-position: -1920px -270px}.sbnpc-crystal_sentry { background-position: -2040px -270px}.sbnpc-dante_grey { background-position: -2160px -270px}.sbnpc-dante_statue { background-position: -2280px -270px}.sbnpc-default_lost_adventurer { background-position: -2400px -270px}.sbnpc-derp_candidate { background-position: -2520px -270px}.sbnpc-diamond_guy { background-position: -2640px -270px}.sbnpc-dictator { background-position: -2760px -270px}.sbnpc-dirt_guy { background-position: 0 -540px}.sbnpc-donpireso { background-position: -120px -540px}.sbnpc-duncan { background-position: -240px -540px}.sbnpc-dungeons_candidate { background-position: -360px -540px}.sbnpc-dungeons_hub_selector { background-position: -480px -540px}.sbnpc-dusk { background-position: -600px -540px}.sbnpc-dwarf_banker { background-position: -720px -540px}.sbnpc-dwarf_citizen_female_5 { background-position: -840px -540px}.sbnpc-dwarf_citizen_female_6 { background-position: -960px -540px}.sbnpc-dwarf_citizen_female_7 { background-position: -1080px -540px}.sbnpc-dwarf_citizen_male_1 { background-position: -1200px -540px}.sbnpc-dwarf_citizen_male_2 { background-position: -1320px -540px}.sbnpc-dwarf_citizen_male_3 { background-position: -1440px -540px}.sbnpc-dwarf_citizen_male_4 { background-position: -1560px -540px}.sbnpc-dwarf_council_female_5 { background-position: -1680px -540px}.sbnpc-dwarf_council_female_6 { background-position: -1800px -540px}.sbnpc-dwarf_council_female_7 { background-position: -1920px -540px}.sbnpc-dwarf_council_female_8 { background-position: -2040px -540px}.sbnpc-dwarf_council_male_1 { background-position: -2160px -540px}.sbnpc-dwarf_council_male_2 { background-position: -2280px -540px}.sbnpc-dwarf_council_male_3 { background-position: -2400px -540px}.sbnpc-dwarf_council_male_4 { background-position: -2520px -540px}.sbnpc-dwarf_militia_1 { background-position: -2640px -540px}.sbnpc-dwarf_militia_2 { background-position: -2760px -540px}.sbnpc-dwarf_militia_3 { background-position: 0 -810px}.sbnpc-dwarf_militia_4 { background-position: -120px -810px}.sbnpc-dwarf_militia_5 { background-position: -240px -810px}.sbnpc-dwarf_militia_6 { background-position: -360px -810px}.sbnpc-dwarf_royalguard_female_5 { background-position: -480px -810px}.sbnpc-dwarf_royalguard_female_6 { background-position: -600px -810px}.sbnpc-dwarf_royalguard_female_7 { background-position: -720px -810px}.sbnpc-dwarf_royalguard_female_8 { background-position: -840px -810px}.sbnpc-dwarf_royalguard_male_1 { background-position: -960px -810px}.sbnpc-dwarf_royalguard_male_2 { background-position: -1080px -810px}.sbnpc-dwarf_royalguard_male_3 { background-position: -1200px -810px}.sbnpc-dwarf_royalguard_male_4 { background-position: -1320px -810px}.sbnpc-economist_candidate { background-position: -1440px -810px}.sbnpc-elle { background-position: -1560px -810px}.sbnpc-emissary_female_1 { background-position: -1680px -810px}.sbnpc-emissary_female_2 { background-position: -1800px -810px}.sbnpc-emissary_female_3 { background-position: -1920px -810px}.sbnpc-emissary_male_1 { background-position: -2040px -810px}.sbnpc-emissary_male_2 { background-position: -2160px -810px}.sbnpc-emissary_male_3 { background-position: -2280px -810px}.sbnpc-end_dealer { background-position: -2400px -810px}.sbnpc-enderman_liquid_hot_magma { background-position: -2520px -810px}.sbnpc-enraged_revenant_horror { background-position: -2640px -810px}.sbnpc-entity_liquid_hot_magma { background-position: -2760px -810px}.sbnpc-event_master { background-position: 0 -1080px}.sbnpc-events_candidate { background-position: -120px -1080px}.sbnpc-fairy { background-position: -240px -1080px}.sbnpc-farm_merchant { background-position: -360px -1080px}.sbnpc-farmer { background-position: -480px -1080px}.sbnpc-farmer_jon { background-position: -600px -1080px}.sbnpc-fire_guy { background-position: -720px -1080px}.sbnpc-fish_merchant { background-position: -840px -1080px}.sbnpc-fisherman { background-position: -960px -1080px}.sbnpc-fishing_candidate { background-position: -1080px -1080px}.sbnpc-flamer_undead { background-position: -1200px -1080px}.sbnpc-forger { background-position: -1320px -1080px}.sbnpc-frank_undead { background-position: -1440px -1080px}.sbnpc-friendly_hiker { background-position: -1560px -1080px}.sbnpc-frost_undead { background-position: -1680px -1080px}.sbnpc-frosty { background-position: -1800px -1080px}.sbnpc-frozen_lost_adventurer { background-position: -1920px -1080px}.sbnpc-furry_e_boy { background-position: -2040px -1080px}.sbnpc-gatekeeper { background-position: -2160px -1080px}.sbnpc-giant_undead { background-position: -2280px -1080px}.sbnpc-goblin { background-position: -2400px -1080px}.sbnpc-goblin_armor_1 { background-position: -2520px -1080px}.sbnpc-goblin_armor_2 { background-position: -2640px -1080px}.sbnpc-goblin_armor_3 { background-position: -2760px -1080px}.sbnpc-goblin_armor_4 { background-position: 0 -1350px}.sbnpc-goblin_king_1 { background-position: -120px -1350px}.sbnpc-goblin_murderlover { background-position: -240px -1350px}.sbnpc-goblin_naked_1 { background-position: -360px -1350px}.sbnpc-goblin_naked_2 { background-position: -480px -1350px}.sbnpc-goblin_naked_3 { background-position: -600px -1350px}.sbnpc-goblin_naked_4 { background-position: -720px -1350px}.sbnpc-goblin_naked_5 { background-position: -840px -1350px}.sbnpc-gold_forger { background-position: -960px -1350px}.sbnpc-goon { background-position: -1080px -1350px}.sbnpc-grandma_wolf { background-position: -1200px -1350px}.sbnpc-great_white_shark { background-position: -1320px -1350px}.sbnpc-guber { background-position: -1440px -1350px}.sbnpc-guildford { background-position: -1560px -1350px}.sbnpc-gulliver { background-position: -1680px -1350px}.sbnpc-gustave { background-position: -1800px -1350px}.sbnpc-haymitch { background-position: -1920px -1350px}.sbnpc-hephaestus { background-position: -2040px -1350px}.sbnpc-holy_lost_adventurer { background-position: -2160px -1350px}.sbnpc-hub_selector { background-position: -2280px -1350px}.sbnpc-hungry_hiker { background-position: -2400px -1350px}.sbnpc-hunter_ava { background-position: -2520px -1350px}.sbnpc-ice_fisherman { background-position: -2640px -1350px}.sbnpc-iron_forger { background-position: -2760px -1350px}.sbnpc-jacob { background-position: 0 -1620px}.sbnpc-jake { background-position: -120px -1620px}.sbnpc-juliette { background-position: -240px -1620px}.sbnpc-kessie { background-position: -360px -1620px}.sbnpc-king_midas { background-position: -480px -1620px}.sbnpc-lapis_miner { background-position: -600px -1620px}.sbnpc-lazy_miner { background-position: -720px -1620px}.sbnpc-leech_undead { background-position: -840px -1620px}.sbnpc-lift_operator { background-position: -960px -1620px}.sbnpc-liquid_hot_magma { background-position: -1080px -1620px}.sbnpc-livid { background-position: -1200px -1620px}.sbnpc-livid_undead { background-position: -1320px -1620px}.sbnpc-lonely_philosopher { background-position: -1440px -1620px}.sbnpc-lumber_merchant { background-position: -1560px -1620px}.sbnpc-lumberjack { background-position: -1680px -1620px}.sbnpc-mason { background-position: -1800px -1620px}.sbnpc-master_tactician { background-position: -1920px -1620px}.sbnpc-mayhem_main { background-position: -2040px -1620px}.sbnpc-mayor { background-position: -2160px -1620px}.sbnpc-melancholic_viking { background-position: -2280px -1620px}.sbnpc-melody { background-position: -2400px -1620px}.sbnpc-mine_merchant { background-position: -2520px -1620px}.sbnpc-mining_candidate { background-position: -2640px -1620px}.sbnpc-minos_champion { background-position: -2760px -1620px}.sbnpc-minos_inquisitor { background-position: 0 -1890px}.sbnpc-minotaur { background-position: -120px -1890px}.sbnpc-mort { background-position: -240px -1890px}.sbnpc-mr_dead_undead { background-position: -360px -1890px}.sbnpc-mute_undead { background-position: -480px -1890px}.sbnpc-nitroholic { background-position: -600px -1890px}.sbnpc-nurse_shark { background-position: -720px -1890px}.sbnpc-old_man_garry { background-position: -840px -1890px}.sbnpc-ooze_undead { background-position: -960px -1890px}.sbnpc-ophelia { background-position: -1080px -1890px}.sbnpc-oringo { background-position: -1200px -1890px}.sbnpc-parasite_undead { background-position: -1320px -1890px}.sbnpc-pat { background-position: -1440px -1890px}.sbnpc-personal_bank_upgrader { background-position: -1560px -1890px}.sbnpc-pet_collector { background-position: -1680px -1890px}.sbnpc-pet_sitter { background-position: -1800px -1890px}.sbnpc-pets_candidate { background-position: -1920px -1890px}.sbnpc-placeholder_candidate { background-position: -2040px -1890px}.sbnpc-player_jerry { background-position: -2160px -1890px}.sbnpc-potato_king { background-position: -2280px -1890px}.sbnpc-professor { background-position: -2400px -1890px}.sbnpc-psycho_undead { background-position: -2520px -1890px}.sbnpc-putrid_undead { background-position: -2640px -1890px}.sbnpc-puzzler { background-position: -2760px -1890px}.sbnpc-rainmaker { background-position: 0 -2160px}.sbnpc-reaper_undead { background-position: -120px -2160px}.sbnpc-redstone_engineer { background-position: -240px -2160px}.sbnpc-refraction { background-position: -360px -2160px}.sbnpc-relenter { background-position: -480px -2160px}.sbnpc-revenant_horror { background-position: -600px -2160px}.sbnpc-revoker_undead { background-position: -720px -2160px}.sbnpc-rick { background-position: -840px -2160px}.sbnpc-romero_final { background-position: -960px -2160px}.sbnpc-romero_normal { background-position: -1080px -2160px}.sbnpc-sadan { background-position: -1200px -2160px}.sbnpc-salesman_christmas { background-position: -1320px -2160px}.sbnpc-salesman_easter { background-position: -1440px -2160px}.sbnpc-salesman_generic { background-position: -1560px -2160px}.sbnpc-salesman_halloween { background-position: -1680px -2160px}.sbnpc-salesman_summer { background-position: -1800px -2160px}.sbnpc-scarf_archer { background-position: -1920px -2160px}.sbnpc-scarf_mage { background-position: -2040px -2160px}.sbnpc-scarf_priest { background-position: -2160px -2160px}.sbnpc-scarf_undead { background-position: -2280px -2160px}.sbnpc-scarf_warrior { background-position: -2400px -2160px}.sbnpc-scoop { background-position: -2520px -2160px}.sbnpc-scorpius { background-position: -2640px -2160px}.sbnpc-shadow_assassin { background-position: -2760px -2160px}.sbnpc-shady_bartender { background-position: 0 -2430px}.sbnpc-shady_cousin { background-position: -120px -2430px}.sbnpc-shaggy { background-position: -240px -2430px}.sbnpc-shepherd { background-position: -360px -2430px}.sbnpc-simon_hat { background-position: -480px -2430px}.sbnpc-sirius { background-position: -600px -2430px}.sbnpc-skeletor_prime { background-position: -720px -2430px}.sbnpc-skull_undead { background-position: -840px -2430px}.sbnpc-slayer { background-position: -960px -2430px}.sbnpc-slayer_candidate { background-position: -1080px -2430px}.sbnpc-snowmaker { background-position: -1200px -2430px}.sbnpc-spirit_bear { background-position: -1320px -2430px}.sbnpc-spooky { background-position: -1440px -2430px}.sbnpc-st_jerry { background-position: -1560px -2430px}.sbnpc-sylent { background-position: -1680px -2430px}.sbnpc-tailor_assistant { background-position: -1800px -2430px}.sbnpc-tailor_owner { background-position: -1920px -2430px}.sbnpc-tammy { background-position: -2040px -2430px}.sbnpc-tear_undead { background-position: -2160px -2430px}.sbnpc-technoblade { background-position: -2280px -2430px}.sbnpc-terracotta { background-position: -2400px -2430px}.sbnpc-terry { background-position: -2520px -2430px}.sbnpc-thirty_virus { background-position: -2640px -2430px}.sbnpc-tiger_shark { background-position: -2760px -2430px}.sbnpc-timedeo { background-position: -2880px 0}.sbnpc-tomioka { background-position: -2880px -270px}.sbnpc-tony { background-position: -2880px -540px}.sbnpc-treasure_horder { background-position: -2880px -810px}.sbnpc-treasure_hunter { background-position: -2880px -1080px}.sbnpc-trevor { background-position: -2880px -1350px}.sbnpc-trinity { background-position: -2880px -1620px}.sbnpc-unstable_lost_adventurer { background-position: -2880px -1890px}.sbnpc-vader_undead { background-position: -2880px -2160px}.sbnpc-vinny { background-position: -2880px -2430px}.sbnpc-walker_undead { background-position: 0 -2700px}.sbnpc-walter { background-position: -120px -2700px}.sbnpc-weaponsmith { background-position: -240px -2700px}.sbnpc-weirdo_0 { background-position: -360px -2700px}.sbnpc-weirdo_1 { background-position: -480px -2700px}.sbnpc-weirdo_2 { background-position: -600px -2700px}.sbnpc-winona { background-position: -720px -2700px}.sbnpc-winter_banker { background-position: -840px -2700px}.sbnpc-wizard { background-position: -960px -2700px}.sbnpc-wizard_candidate { background-position: -1080px -2700px}.sbnpc-wizard_quest { background-position: -1200px -2700px}.sbnpc-wolf_shaman { background-position: -1320px -2700px}.sbnpc-wool_weaver { background-position: -1440px -2700px}.sbnpc-young_lost_adventurer { background-position: -1560px -2700px}.sbnpc-zog { background-position: -1680px -2700px}.sbnpc-zombie_commander { background-position: -1800px -2700px}.sbsprite-cobblestone_generator_10 { background-position: 0 0}.sbsprite-cobblestone_generator_11 { background-position: -22px 0}.sbsprite-danger_3_portal { background-position: -44px 0}.sbsprite-resource_regenerator_crystal { background-position: -66px 0}.sbsprite-sugar_cane_generator_12 { background-position: -88px 0}.sbsprite-cobblestone_generator_12 { background-position: -110px 0}.sbsprite-sugar_cane_generator_11 { background-position: -132px 0}.sbsprite-sugar_cane_generator_10 { background-position: -154px 0}.sbsprite-small_shelves { background-position: -176px 0}.sbsprite-bingo_talisman { background-position: -198px 0}.sbsprite-red_scarf { background-position: -220px 0}.sbsprite-wither_helmet { background-position: -242px 0}.sbsprite-glowstone_generator_11 { background-position: -264px 0}.sbsprite-glowstone_generator_10 { background-position: -286px 0}.sbsprite-fast_travel_crypt { background-position: -308px 0}.sbsprite-present_personality { background-position: -330px 0}.sbsprite-extra_large_gemstone_sack { background-position: -352px 0}.sbsprite-gold_bonzo_head { background-position: -374px 0}.sbsprite-shadow_assassin_mauve { background-position: -396px 0}.sbsprite-ender_artifact { background-position: -418px 0}.sbsprite-sheep_generator_1 { background-position: -440px 0}.sbsprite-beach_chair_plus { background-position: -462px 0}.sbsprite-sheep_generator_2 { background-position: -484px 0}.sbsprite-sheep_generator_3 { background-position: -506px 0}.sbsprite-sheep_generator_4 { background-position: -528px 0}.sbsprite-sheep_generator_5 { background-position: -550px 0}.sbsprite-sheep_generator_6 { background-position: -572px 0}.sbsprite-frozen_spider { background-position: -594px 0}.sbsprite-sheep_generator_7 { background-position: -616px 0}.sbsprite-sheep_generator_8 { background-position: -638px 0}.sbsprite-sheep_generator_9 { background-position: -660px 0}.sbsprite-nether_wart_island_crystal { background-position: -682px 0}.sbsprite-medium_fishing_sack { background-position: -704px 0}.sbsprite-gold_generator_9 { background-position: -726px 0}.sbsprite-gold_generator_7 { background-position: -748px 0}.sbsprite-gold_generator_8 { background-position: -770px 0}.sbsprite-gold_generator_5 { background-position: -792px 0}.sbsprite-penguin_10 { background-position: -814px 0}.sbsprite-diver_helmet { background-position: -836px 0}.sbsprite-gold_generator_6 { background-position: -858px 0}.sbsprite-penguin_11 { background-position: -880px 0}.sbsprite-gold_generator_3 { background-position: -902px 0}.sbsprite-gold_generator_4 { background-position: -924px 0}.sbsprite-pet_skin_sheep_purple { background-position: -946px 0}.sbsprite-gold_generator_1 { background-position: -968px 0}.sbsprite-gold_generator_2 { background-position: -990px 0}.sbsprite-jar_of_pickles { background-position: -1012px 0}.sbsprite-griffin_upgrade_stone_legendary { background-position: -1034px 0}.sbsprite-pet_skin_sheep_orange { background-position: 0 -22px}.sbsprite-talisman { background-position: -22px -22px}.sbsprite-jungle_generator_7 { background-position: -44px -22px}.sbsprite-jungle_generator_6 { background-position: -66px -22px}.sbsprite-tutti_frutti_poison { background-position: -88px -22px}.sbsprite-fishing_generator_11 { background-position: -110px -22px}.sbsprite-jungle_generator_9 { background-position: -132px -22px}.sbsprite-fishing_generator_10 { background-position: -154px -22px}.sbsprite-jungle_generator_8 { background-position: -176px -22px}.sbsprite-jungle_generator_3 { background-position: -198px -22px}.sbsprite-witch_mask { background-position: -220px -22px}.sbsprite-yellow { background-position: -242px -22px}.sbsprite-jungle_generator_2 { background-position: -264px -22px}.sbsprite-jungle_generator_5 { background-position: -286px -22px}.sbsprite-jungle_generator_4 { background-position: -308px -22px}.sbsprite-bat_person_artifact { background-position: -330px -22px}.sbsprite-cocoa_generator_11 { background-position: -352px -22px}.sbsprite-cocoa_generator_12 { background-position: -374px -22px}.sbsprite-jungle_generator_1 { background-position: -396px -22px}.sbsprite-cocoa_generator_10 { background-position: -418px -22px}.sbsprite-beheaded_horror { background-position: -440px -22px}.sbsprite-clay_generator_6 { background-position: -462px -22px}.sbsprite-clay_generator_7 { background-position: -484px -22px}.sbsprite-clay_generator_8 { background-position: -506px -22px}.sbsprite-clay_generator_9 { background-position: -528px -22px}.sbsprite-clay_generator_2 { background-position: -550px -22px}.sbsprite-clay_generator_3 { background-position: -572px -22px}.sbsprite-clay_generator_4 { background-position: -594px -22px}.sbsprite-clay_generator_5 { background-position: -616px -22px}.sbsprite-gold_livid_head { background-position: -638px -22px}.sbsprite-clay_generator_1 { background-position: -660px -22px}.sbsprite-medium_slayer_sack { background-position: -682px -22px}.sbsprite-pet_skin_wither { background-position: -704px -22px}.sbsprite-pink_frosted_donut_3 { background-position: -726px -22px}.sbsprite-pink_frosted_donut_2 { background-position: -748px -22px}.sbsprite-pink_frosted_donut_5 { background-position: -770px -22px}.sbsprite-garland { background-position: -792px -22px}.sbsprite-pink_frosted_donut_4 { background-position: -814px -22px}.sbsprite-pink_frosted_donut_7 { background-position: -836px -22px}.sbsprite-pink_frosted_donut_6 { background-position: -858px -22px}.sbsprite-pink_frosted_donut_9 { background-position: -880px -22px}.sbsprite-pink_frosted_donut_8 { background-position: -902px -22px}.sbsprite-rune_jerry { background-position: -924px -22px}.sbsprite-feather_ring { background-position: -946px -22px}.sbsprite-perfect_forge { background-position: -968px -22px}.sbsprite-bingo_relic { background-position: -990px -22px}.sbsprite-revenant_catalyst { background-position: -1012px -22px}.sbsprite-sun_2 { background-position: -1034px -22px}.sbsprite-sun_1 { background-position: 0 -44px}.sbsprite-pet_skin_tiger_twilight { background-position: -22px -44px}.sbsprite-blessing_of_life { background-position: -44px -44px}.sbsprite-plasma { background-position: -66px -44px}.sbsprite-carrot_patch { background-position: -88px -44px}.sbsprite-pink_frosted_donut_1 { background-position: -110px -44px}.sbsprite-bestiary_the_park { background-position: -132px -44px}.sbsprite-end_stone_10 { background-position: -154px -44px}.sbsprite-end_stone_11 { background-position: -176px -44px}.sbsprite-griffin_upgrade_stone_epic { background-position: -198px -44px}.sbsprite-iron_generator_10 { background-position: -220px -44px}.sbsprite-pet_skin_rock_embarrassed { background-position: -242px -44px}.sbsprite-fast_travel_barn { background-position: -264px -44px}.sbsprite-iron_generator_11 { background-position: -286px -44px}.sbsprite-iron_generator_12 { background-position: -308px -44px}.sbsprite-large_runes_sack { background-position: -330px -44px}.sbsprite-rune_redstone { background-position: -352px -44px}.sbsprite-horseman_candle { background-position: -374px -44px}.sbsprite-tepid_green_tea { background-position: -396px -44px}.sbsprite-large_agronomy_sack { background-position: -418px -44px}.sbsprite-wise_shimmer { background-position: -440px -44px}.sbsprite-maxor_the_fish { background-position: -462px -44px}.sbsprite-revenant_generator_4 { background-position: -484px -44px}.sbsprite-revenant_generator_5 { background-position: -506px -44px}.sbsprite-revenant_generator_6 { background-position: -528px -44px}.sbsprite-revenant_generator_7 { background-position: -550px -44px}.sbsprite-revenant_generator_1 { background-position: -572px -44px}.sbsprite-revenant_generator_2 { background-position: -594px -44px}.sbsprite-epoch_cake_orange { background-position: -616px -44px}.sbsprite-revenant_generator_3 { background-position: -638px -44px}.sbsprite-large_gemstone_sack { background-position: -660px -44px}.sbsprite-mender_crown { background-position: -682px -44px}.sbsprite-mummy_10 { background-position: -704px -44px}.sbsprite-revenant_generator_8 { background-position: -726px -44px}.sbsprite-revenant_generator_9 { background-position: -748px -44px}.sbsprite-mummy_11 { background-position: -770px -44px}.sbsprite-hard_stone_generator_9 { background-position: -792px -44px}.sbsprite-hard_stone_generator_8 { background-position: -814px -44px}.sbsprite-hard_stone_generator_7 { background-position: -836px -44px}.sbsprite-hard_stone_generator_6 { background-position: -858px -44px}.sbsprite-hard_stone_generator_5 { background-position: -880px -44px}.sbsprite-hard_stone_generator_4 { background-position: -902px -44px}.sbsprite-medium_talisman_bag { background-position: -924px -44px}.sbsprite-hard_stone_generator_3 { background-position: -946px -44px}.sbsprite-black_small_backpack { background-position: -968px -44px}.sbsprite-hard_stone_generator_2 { background-position: -990px -44px}.sbsprite-harp { background-position: -1012px -44px}.sbsprite-hard_stone_generator_1 { background-position: -1034px -44px}.sbsprite-pet_skin_sheep_green { background-position: 0 -66px}.sbsprite-magma_cube_generator_10 { background-position: -22px -66px}.sbsprite-fishing_crystal { background-position: -44px -66px}.sbsprite-magma_cube_generator_11 { background-position: -66px -66px}.sbsprite-rough_amber_gem { background-position: -88px -66px}.sbsprite-oak_generator_5 { background-position: -110px -66px}.sbsprite-oak_generator_4 { background-position: -132px -66px}.sbsprite-oak_generator_3 { background-position: -154px -66px}.sbsprite-oak_generator_2 { background-position: -176px -66px}.sbsprite-red_claw_ring { background-position: -198px -66px}.sbsprite-oak_generator_9 { background-position: -220px -66px}.sbsprite-oak_generator_8 { background-position: -242px -66px}.sbsprite-purple_small_backpack { background-position: -264px -66px}.sbsprite-oak_generator_7 { background-position: -286px -66px}.sbsprite-oak_generator_6 { background-position: -308px -66px}.sbsprite-picnic_set { background-position: -330px -66px}.sbsprite-oak_generator_1 { background-position: -352px -66px}.sbsprite-pet_skin_sheep_neon_red { background-position: -374px -66px}.sbsprite-hot_stuff { background-position: -396px -66px}.sbsprite-skeleton_generator_11 { background-position: -418px -66px}.sbsprite-skeleton_generator_10 { background-position: -440px -66px}.sbsprite-mayor_jerry { background-position: -462px -66px}.sbsprite-generals_armor_of_the_resistance_helmet { background-position: -484px -66px}.sbsprite-recall_potion { background-position: -506px -66px}.sbsprite-portable_builder { background-position: -528px -66px}.sbsprite-rune_ice { background-position: -550px -66px}.sbsprite-zombie_brain_mixin { background-position: -572px -66px}.sbsprite-pet_skin_rabbit_aquamarine { background-position: -594px -66px}.sbsprite-rune_music { background-position: -616px -66px}.sbsprite-magnetic_talisman { background-position: -638px -66px}.sbsprite-light_grey_jumbo_backpack { background-position: -660px -66px}.sbsprite-onyx { background-position: -682px -66px}.sbsprite-rune_fire { background-position: -704px -66px}.sbsprite-pet_skin_sheep_black { background-position: -726px -66px}.sbsprite-ice_fireplace { background-position: -748px -66px}.sbsprite-sun_personality { background-position: -770px -66px}.sbsprite-pet { background-position: -792px -66px}.sbsprite-melon_2 { background-position: -814px -66px}.sbsprite-melon_3 { background-position: -836px -66px}.sbsprite-epoch_cake_purple { background-position: -858px -66px}.sbsprite-melon_1 { background-position: -880px -66px}.sbsprite-krampus_helmet { background-position: -902px -66px}.sbsprite-coffee_table { background-position: -924px -66px}.sbsprite-necromancer_lord_helmet { background-position: -946px -66px}.sbsprite-melon_8 { background-position: -968px -66px}.sbsprite-blue_ice_hunk { background-position: -990px -66px}.sbsprite-divan_helmet { background-position: -1012px -66px}.sbsprite-melon_9 { background-position: -1034px -66px}.sbsprite-melon_6 { background-position: 0 -88px}.sbsprite-melon_7 { background-position: -22px -88px}.sbsprite-melon_4 { background-position: -44px -88px}.sbsprite-melon_5 { background-position: -66px -88px}.sbsprite-blue_candy { background-position: -88px -88px}.sbsprite-squid_hat { background-position: -110px -88px}.sbsprite-dungeon_green_support_orb { background-position: -132px -88px}.sbsprite-coin_diamond_3 { background-position: -154px -88px}.sbsprite-pink { background-position: -176px -88px}.sbsprite-coin_diamond_2 { background-position: -198px -88px}.sbsprite-repelling_candle { background-position: -220px -88px}.sbsprite-enderman_generator_11 { background-position: -242px -88px}.sbsprite-power_artifact { background-position: -264px -88px}.sbsprite-enderman_generator_10 { background-position: -286px -88px}.sbsprite-amethyst_crystal { background-position: -308px -88px}.sbsprite-crimson_essence { background-position: -330px -88px}.sbsprite-blue_small_backpack { background-position: -352px -88px}.sbsprite-grey_jumbo_backpack { background-position: -374px -88px}.sbsprite-wither_essence { background-position: -396px -88px}.sbsprite-brown_jumbo_backpack { background-position: -418px -88px}.sbsprite-archer_dungeon_ability_1 { background-position: -440px -88px}.sbsprite-crochet_tiger_plushie { background-position: -462px -88px}.sbsprite-final_destination_helmet { background-position: -484px -88px}.sbsprite-luxurious_spool { background-position: -506px -88px}.sbsprite-auto_recombobulator { background-position: -528px -88px}.sbsprite-killer_11 { background-position: -550px -88px}.sbsprite-spooky_bait { background-position: -572px -88px}.sbsprite-killer_10 { background-position: -594px -88px}.sbsprite-fast_travel_howl { background-position: -616px -88px}.sbsprite-etherwarp_conduit { background-position: -638px -88px}.sbsprite-forest_island_crystal { background-position: -660px -88px}.sbsprite-spirit_mask { background-position: -682px -88px}.sbsprite-sacks { background-position: -704px -88px}.sbsprite-obsidian_generator_10 { background-position: -726px -88px}.sbsprite-chicken_generator_10 { background-position: -748px -88px}.sbsprite-chicken_generator_12 { background-position: -770px -88px}.sbsprite-wood_singularity { background-position: -792px -88px}.sbsprite-chicken_generator_11 { background-position: -814px -88px}.sbsprite-sun_6 { background-position: -836px -88px}.sbsprite-builder_melon { background-position: -858px -88px}.sbsprite-santa_1 { background-position: -880px -88px}.sbsprite-sun_5 { background-position: -902px -88px}.sbsprite-dirt_bottle { background-position: -924px -88px}.sbsprite-sun_4 { background-position: -946px -88px}.sbsprite-handy_blood_chalice { background-position: -968px -88px}.sbsprite-sun_3 { background-position: -990px -88px}.sbsprite-sun_9 { background-position: -1012px -88px}.sbsprite-superior_fragment { background-position: -1034px -88px}.sbsprite-sun_8 { background-position: 0 -110px}.sbsprite-sun_7 { background-position: -22px -110px}.sbsprite-your_essence { background-position: -44px -110px}.sbsprite-pink_greater_backpack { background-position: -66px -110px}.sbsprite-unstable_fragment { background-position: -88px -110px}.sbsprite-obsidian_generator_11 { background-position: -110px -110px}.sbsprite-obsidian_generator_12 { background-position: -132px -110px}.sbsprite-perfect_sapphire_gem { background-position: -154px -110px}.sbsprite-gravel_generator_11 { background-position: -176px -110px}.sbsprite-gravel_generator_10 { background-position: -198px -110px}.sbsprite-candy_corn { background-position: -220px -110px}.sbsprite-mineral_talisman { background-position: -242px -110px}.sbsprite-divan_alloy { background-position: -264px -110px}.sbsprite-moil_log { background-position: -286px -110px}.sbsprite-super_magic_mushroom_soup { background-position: -308px -110px}.sbsprite-easter_basket { background-position: -330px -110px}.sbsprite-hunter_talisman { background-position: -352px -110px}.sbsprite-medium_potion_bag { background-position: -374px -110px}.sbsprite-pet_skin_megalodon_bullhead { background-position: -396px -110px}.sbsprite-broken_piggy_bank { background-position: -418px -110px}.sbsprite-mayor_technoblade { background-position: -440px -110px}.sbsprite-farming_talisman { background-position: -462px -110px}.sbsprite-flawed_sapphire_gem { background-position: -484px -110px}.sbsprite-light_blue_large_backpack { background-position: -506px -110px}.sbsprite-kindred { background-position: -528px -110px}.sbsprite-pocket_espresso_machine { background-position: -550px -110px}.sbsprite-overflux_power_orb { background-position: -572px -110px}.sbsprite-potato_spreading { background-position: -594px -110px}.sbsprite-acacia_generator_11 { background-position: -616px -110px}.sbsprite-birch_generator_6 { background-position: -638px -110px}.sbsprite-acacia_generator_10 { background-position: -660px -110px}.sbsprite-birch_generator_5 { background-position: -682px -110px}.sbsprite-birch_generator_4 { background-position: -704px -110px}.sbsprite-birch_generator_3 { background-position: -726px -110px}.sbsprite-holy_dragon_helmet { background-position: -748px -110px}.sbsprite-basketball_personality { background-position: -770px -110px}.sbsprite-birch_generator_9 { background-position: -792px -110px}.sbsprite-birch_generator_8 { background-position: -814px -110px}.sbsprite-birch_generator_7 { background-position: -836px -110px}.sbsprite-birch_generator_2 { background-position: -858px -110px}.sbsprite-birch_generator_1 { background-position: -880px -110px}.sbsprite-anubis { background-position: -902px -110px}.sbsprite-santa_8 { background-position: -924px -110px}.sbsprite-santa_9 { background-position: -946px -110px}.sbsprite-santa_6 { background-position: -968px -110px}.sbsprite-santa_7 { background-position: -990px -110px}.sbsprite-santa_4 { background-position: -1012px -110px}.sbsprite-candy_talisman { background-position: -1034px -110px}.sbsprite-santa_5 { background-position: 0 -132px}.sbsprite-santa_2 { background-position: -22px -132px}.sbsprite-santa_3 { background-position: -44px -132px}.sbsprite-small_combat_sack { background-position: -66px -132px}.sbsprite-speed_racer { background-position: -88px -132px}.sbsprite-pet_skin_parrot_blue_macaw { background-position: -110px -132px}.sbsprite-red_large_backpack { background-position: -132px -132px}.sbsprite-sea_archer_helmet { background-position: -154px -132px}.sbsprite-happy_mask { background-position: -176px -132px}.sbsprite-blue_large_backpack { background-position: -198px -132px}.sbsprite-enderman_generator_4 { background-position: -220px -132px}.sbsprite-enderman_generator_3 { background-position: -242px -132px}.sbsprite-enderman_generator_2 { background-position: -264px -132px}.sbsprite-enderman_generator_1 { background-position: -286px -132px}.sbsprite-enderman_generator_8 { background-position: -308px -132px}.sbsprite-enderman_generator_7 { background-position: -330px -132px}.sbsprite-enderman_generator_6 { background-position: -352px -132px}.sbsprite-enderman_generator_5 { background-position: -374px -132px}.sbsprite-green_candy { background-position: -396px -132px}.sbsprite-bestiary_milestone { background-position: -418px -132px}.sbsprite-colossal_exp_bottle_upgrade { background-position: -440px -132px}.sbsprite-sun_11 { background-position: -462px -132px}.sbsprite-sun_10 { background-position: -484px -132px}.sbsprite-vampire_witch_mask { background-position: -506px -132px}.sbsprite-pet_skin_sheep_yellow { background-position: -528px -132px}.sbsprite-bank_upgrade_palatial { background-position: -550px -132px}.sbsprite-flawed_ruby_gem { background-position: -572px -132px}.sbsprite-redstone_generator_9 { background-position: -594px -132px}.sbsprite-redstone_generator_7 { background-position: -616px -132px}.sbsprite-redstone_generator_8 { background-position: -638px -132px}.sbsprite-arachne_fragment { background-position: -660px -132px}.sbsprite-spider_generator_10 { background-position: -682px -132px}.sbsprite-spider_generator_11 { background-position: -704px -132px}.sbsprite-epoch_cake_red { background-position: -726px -132px}.sbsprite-orange_jumbo_backpack { background-position: -748px -132px}.sbsprite-giant_the_fish { background-position: -770px -132px}.sbsprite-minnow_bait { background-position: -792px -132px}.sbsprite-enderman_generator_9 { background-position: -814px -132px}.sbsprite-mastiff_puppy { background-position: -836px -132px}.sbsprite-talisman_enrichment_critical_damage { background-position: -858px -132px}.sbsprite-fast_travel_forge { background-position: -880px -132px}.sbsprite-goblin_omelette { background-position: -902px -132px}.sbsprite-builder_ancient_fruit { background-position: -924px -132px}.sbsprite-master_skull_tier_10 { background-position: -946px -132px}.sbsprite-hardened_wood { background-position: -968px -132px}.sbsprite-large_winter_sack { background-position: -990px -132px}.sbsprite-talisman_enrichment_intelligence { background-position: -1012px -132px}.sbsprite-snow_snowglobe { background-position: -1034px -132px}.sbsprite-summoning_eye { background-position: 0 -154px}.sbsprite-cavespider_generator_10 { background-position: -22px -154px}.sbsprite-clownfish_10 { background-position: -44px -154px}.sbsprite-cavespider_generator_11 { background-position: -66px -154px}.sbsprite-revenant_generator_12 { background-position: -88px -154px}.sbsprite-clownfish_11 { background-position: -110px -154px}.sbsprite-revenant_generator_11 { background-position: -132px -154px}.sbsprite-revenant_generator_10 { background-position: -154px -154px}.sbsprite-red_small_backpack { background-position: -176px -154px}.sbsprite-soulflow { background-position: -198px -154px}.sbsprite-farming_fortune { background-position: -220px -154px}.sbsprite-dungeon_stone_berserk { background-position: -242px -154px}.sbsprite-green_greater_backpack { background-position: -264px -154px}.sbsprite-mastiff_helmet { background-position: -286px -154px}.sbsprite-purple { background-position: -308px -154px}.sbsprite-skeleton_generator_7 { background-position: -330px -154px}.sbsprite-skeleton_generator_6 { background-position: -352px -154px}.sbsprite-skeleton_generator_9 { background-position: -374px -154px}.sbsprite-skeleton_generator_8 { background-position: -396px -154px}.sbsprite-speed_ring { background-position: -418px -154px}.sbsprite-skeleton_generator_3 { background-position: -440px -154px}.sbsprite-rabbit_hutch { background-position: -462px -154px}.sbsprite-skeleton_generator_2 { background-position: -484px -154px}.sbsprite-skeleton_generator_5 { background-position: -506px -154px}.sbsprite-minion_storage_expander { background-position: -528px -154px}.sbsprite-skeleton_generator_4 { background-position: -550px -154px}.sbsprite-werewolf_helmet { background-position: -572px -154px}.sbsprite-light_blue_small_backpack { background-position: -594px -154px}.sbsprite-skeleton_generator_1 { background-position: -616px -154px}.sbsprite-lapis_chest { background-position: -638px -154px}.sbsprite-healing_talisman { background-position: -660px -154px}.sbsprite-magma_cube_head { background-position: -682px -154px}.sbsprite-shadow_goggles { background-position: -704px -154px}.sbsprite-ice_generator_11 { background-position: -726px -154px}.sbsprite-fine_jasper_gem { background-position: -748px -154px}.sbsprite-candy_artifact { background-position: -770px -154px}.sbsprite-pet_skin_dragon_neon_blue { background-position: -792px -154px}.sbsprite-fast_travel_desert { background-position: -814px -154px}.sbsprite-rune_end { background-position: -836px -154px}.sbsprite-old_shimmer { background-position: -858px -154px}.sbsprite-skyblock_bench { background-position: -880px -154px}.sbsprite-hay_bale { background-position: -902px -154px}.sbsprite-crit_chance { background-position: -924px -154px}.sbsprite-dungeon_stone { background-position: -946px -154px}.sbsprite-artifact_potion_affinity { background-position: -968px -154px}.sbsprite-yoggie { background-position: -990px -154px}.sbsprite-starred_adaptive_helmet { background-position: -1012px -154px}.sbsprite-foraging_3_portal { background-position: -1034px -154px}.sbsprite-pet_skin_dragon_neon_red { background-position: 0 -176px}.sbsprite-ditto_skull { background-position: -22px -176px}.sbsprite-pig_generator_6 { background-position: -44px -176px}.sbsprite-redstone_generator_1 { background-position: -66px -176px}.sbsprite-pig_generator_5 { background-position: -88px -176px}.sbsprite-redstone_generator_2 { background-position: -110px -176px}.sbsprite-pig_generator_8 { background-position: -132px -176px}.sbsprite-pig_generator_7 { background-position: -154px -176px}.sbsprite-flawless_amethyst_gem { background-position: -176px -176px}.sbsprite-redstone_generator_5 { background-position: -198px -176px}.sbsprite-wither_catalyst { background-position: -220px -176px}.sbsprite-pig_generator_9 { background-position: -242px -176px}.sbsprite-redstone_generator_6 { background-position: -264px -176px}.sbsprite-cyan_jumbo_backpack { background-position: -286px -176px}.sbsprite-redstone_generator_3 { background-position: -308px -176px}.sbsprite-redstone_generator_4 { background-position: -330px -176px}.sbsprite-ice_generator_10 { background-position: -352px -176px}.sbsprite-pig_generator_2 { background-position: -374px -176px}.sbsprite-builder_lettuce { background-position: -396px -176px}.sbsprite-first_master_star { background-position: -418px -176px}.sbsprite-pig_generator_1 { background-position: -440px -176px}.sbsprite-pig_generator_4 { background-position: -462px -176px}.sbsprite-green_medium_backpack { background-position: -484px -176px}.sbsprite-pig_generator_3 { background-position: -506px -176px}.sbsprite-sugar_cane_generator_9 { background-position: -528px -176px}.sbsprite-greater_backpack { background-position: -550px -176px}.sbsprite-sugar_cane_generator_6 { background-position: -572px -176px}.sbsprite-sugar_cane_generator_5 { background-position: -594px -176px}.sbsprite-pet_skin_sheep_neon_blue { background-position: -616px -176px}.sbsprite-sugar_cane_generator_8 { background-position: -638px -176px}.sbsprite-sugar_cane_generator_7 { background-position: -660px -176px}.sbsprite-sugar_cane_generator_2 { background-position: -682px -176px}.sbsprite-sugar_cane_generator_1 { background-position: -704px -176px}.sbsprite-cauldron { background-position: -726px -176px}.sbsprite-sugar_cane_generator_4 { background-position: -748px -176px}.sbsprite-sugar_cane_generator_3 { background-position: -770px -176px}.sbsprite-wheat_island_crystal { background-position: -792px -176px}.sbsprite-boss_collection_scarf { background-position: -814px -176px}.sbsprite-deep_sea_orb { background-position: -836px -176px}.sbsprite-pet_skin_elephant_red { background-position: -858px -176px}.sbsprite-pink_large_backpack { background-position: -880px -176px}.sbsprite-gemstone_collection { background-position: -902px -176px}.sbsprite-carpentry_bench { background-position: -924px -176px}.sbsprite-pet_skin_wolf_henzo_doggo { background-position: -946px -176px}.sbsprite-sloth_11 { background-position: -968px -176px}.sbsprite-sloth_10 { background-position: -990px -176px}.sbsprite-vampire_mask { background-position: -1012px -176px}.sbsprite-reindeer_personality { background-position: -1034px -176px}.sbsprite-minos_hunter_helmet { background-position: 0 -198px}.sbsprite-catacombs_2 { background-position: -22px -198px}.sbsprite-catacombs_3 { background-position: -44px -198px}.sbsprite-catacombs_1 { background-position: -66px -198px}.sbsprite-catacombs_6 { background-position: -88px -198px}.sbsprite-small_runes_sack { background-position: -110px -198px}.sbsprite-catacombs_4 { background-position: -132px -198px}.sbsprite-catacombs_5 { background-position: -154px -198px}.sbsprite-clownfish_hat { background-position: -176px -198px}.sbsprite-fine_topaz_gem { background-position: -198px -198px}.sbsprite-beastmaster_crest_uncommon { background-position: -220px -198px}.sbsprite-superlite_motor { background-position: -242px -198px}.sbsprite-red_greater_backpack { background-position: -264px -198px}.sbsprite-hunter_ring { background-position: -286px -198px}.sbsprite-necromancer_brooch { background-position: -308px -198px}.sbsprite-spooky_shard { background-position: -330px -198px}.sbsprite-grey_medium_backpack { background-position: -352px -198px}.sbsprite-diamond_chest { background-position: -374px -198px}.sbsprite-slime_hat { background-position: -396px -198px}.sbsprite-hermit_crab_2 { background-position: -418px -198px}.sbsprite-enderman_cortex_rewriter { background-position: -440px -198px}.sbsprite-hermit_crab_1 { background-position: -462px -198px}.sbsprite-carrot_generator_11 { background-position: -484px -198px}.sbsprite-carrot_generator_12 { background-position: -506px -198px}.sbsprite-mushroom_generator_4 { background-position: -528px -198px}.sbsprite-carrot_generator_10 { background-position: -550px -198px}.sbsprite-mushroom_generator_3 { background-position: -572px -198px}.sbsprite-mushroom_generator_6 { background-position: -594px -198px}.sbsprite-mushroom_generator_5 { background-position: -616px -198px}.sbsprite-mushroom_generator_8 { background-position: -638px -198px}.sbsprite-mushroom_generator_7 { background-position: -660px -198px}.sbsprite-mushroom_generator_9 { background-position: -682px -198px}.sbsprite-diamond_professor_head { background-position: -704px -198px}.sbsprite-large_foraging_sack { background-position: -726px -198px}.sbsprite-robotron_reflector { background-position: -748px -198px}.sbsprite-wish_ultimate { background-position: -770px -198px}.sbsprite-tessellated_ender_pearl { background-position: -792px -198px}.sbsprite-pet_skin_sheep_red { background-position: -814px -198px}.sbsprite-spirit_decoy { background-position: -836px -198px}.sbsprite-stacked_pumpkins { background-position: -858px -198px}.sbsprite-medium_runes_sack { background-position: -880px -198px}.sbsprite-mushroom_generator_2 { background-position: -902px -198px}.sbsprite-young_dragon_helmet { background-position: -924px -198px}.sbsprite-mushroom_generator_1 { background-position: -946px -198px}.sbsprite-hermit_crab_6 { background-position: -968px -198px}.sbsprite-gravity_talisman { background-position: -990px -198px}.sbsprite-hermit_crab_5 { background-position: -1012px -198px}.sbsprite-hermit_crab_4 { background-position: -1034px -198px}.sbsprite-hermit_crab_3 { background-position: 0 -220px}.sbsprite-melon_10 { background-position: -22px -220px}.sbsprite-party_time_event { background-position: -44px -220px}.sbsprite-grinch_10 { background-position: -66px -220px}.sbsprite-melon_11 { background-position: -88px -220px}.sbsprite-hermit_crab_9 { background-position: -110px -220px}.sbsprite-hermit_crab_8 { background-position: -132px -220px}.sbsprite-grinch_11 { background-position: -154px -220px}.sbsprite-hermit_crab_7 { background-position: -176px -220px}.sbsprite-flower_generator_10 { background-position: -198px -220px}.sbsprite-race_giant_mushroom { background-position: -220px -220px}.sbsprite-flower_generator_11 { background-position: -242px -220px}.sbsprite-flower_generator_12 { background-position: -264px -220px}.sbsprite-redstone_chest { background-position: -286px -220px}.sbsprite-undead_catalyst { background-position: -308px -220px}.sbsprite-master_skull_tier_7 { background-position: -330px -220px}.sbsprite-reindeer_9 { background-position: -352px -220px}.sbsprite-master_skull_tier_6 { background-position: -374px -220px}.sbsprite-rune_slimy { background-position: -396px -220px}.sbsprite-master_skull_tier_9 { background-position: -418px -220px}.sbsprite-medium_shelves { background-position: -440px -220px}.sbsprite-master_skull_tier_8 { background-position: -462px -220px}.sbsprite-plasmaflux_power_orb { background-position: -484px -220px}.sbsprite-adaptive_helmet { background-position: -506px -220px}.sbsprite-pet_skin_endermite_radiant { background-position: -528px -220px}.sbsprite-master_skull_tier_1 { background-position: -550px -220px}.sbsprite-master_skull_tier_3 { background-position: -572px -220px}.sbsprite-oil_barrel { background-position: -594px -220px}.sbsprite-master_skull_tier_2 { background-position: -616px -220px}.sbsprite-master_skull_tier_5 { background-position: -638px -220px}.sbsprite-master_skull_tier_4 { background-position: -660px -220px}.sbsprite-pet_skin_guardian { background-position: -682px -220px}.sbsprite-flawless_jade_gem { background-position: -704px -220px}.sbsprite-survivor_cube { background-position: -726px -220px}.sbsprite-undead_2 { background-position: -748px -220px}.sbsprite-undead_3 { background-position: -770px -220px}.sbsprite-undead_4 { background-position: -792px -220px}.sbsprite-undead_5 { background-position: -814px -220px}.sbsprite-undead_6 { background-position: -836px -220px}.sbsprite-undead_7 { background-position: -858px -220px}.sbsprite-undead_8 { background-position: -880px -220px}.sbsprite-undead_9 { background-position: -902px -220px}.sbsprite-enchanted_book_bundle_vicious { background-position: -924px -220px}.sbsprite-endstone_chest { background-position: -946px -220px}.sbsprite-titanium_fuel_tank { background-position: -968px -220px}.sbsprite-golden_ball { background-position: -990px -220px}.sbsprite-undead_1 { background-position: -1012px -220px}.sbsprite-happy_emoji_5 { background-position: -1034px -220px}.sbsprite-reindeer_1 { background-position: 0 -242px}.sbsprite-warden_heart { background-position: -22px -242px}.sbsprite-happy_emoji_4 { background-position: -44px -242px}.sbsprite-reindeer_2 { background-position: -66px -242px}.sbsprite-happy_emoji_7 { background-position: -88px -242px}.sbsprite-reindeer_3 { background-position: -110px -242px}.sbsprite-happy_emoji_6 { background-position: -132px -242px}.sbsprite-kalhuiki_mask { background-position: -154px -242px}.sbsprite-reindeer_4 { background-position: -176px -242px}.sbsprite-happy_emoji_1 { background-position: -198px -242px}.sbsprite-reindeer_5 { background-position: -220px -242px}.sbsprite-reindeer_6 { background-position: -242px -242px}.sbsprite-happy_emoji_3 { background-position: -264px -242px}.sbsprite-reindeer_7 { background-position: -286px -242px}.sbsprite-happy_emoji_2 { background-position: -308px -242px}.sbsprite-reindeer_8 { background-position: -330px -242px}.sbsprite-happy_emoji_9 { background-position: -352px -242px}.sbsprite-festive_skeleton_personality { background-position: -374px -242px}.sbsprite-happy_emoji_8 { background-position: -396px -242px}.sbsprite-mimic_fragment { background-position: -418px -242px}.sbsprite-pet_skin_parrot_gold_macaw { background-position: -440px -242px}.sbsprite-mithril_drill_engine { background-position: -462px -242px}.sbsprite-titan_helmet { background-position: -484px -242px}.sbsprite-warden_helmet { background-position: -506px -242px}.sbsprite-nether_wart_pouch { background-position: -528px -242px}.sbsprite-red_nose { background-position: -550px -242px}.sbsprite-emerald_generator_12 { background-position: -572px -242px}.sbsprite-farming_1_portal { background-position: -594px -242px}.sbsprite-pet_skin_horse_zombie { background-position: -616px -242px}.sbsprite-devour_ring { background-position: -638px -242px}.sbsprite-mining_1_portal { background-position: -660px -242px}.sbsprite-builder_lilac_fruit { background-position: -682px -242px}.sbsprite-diamond_livid_head { background-position: -704px -242px}.sbsprite-fast_travel_dungeon_hub { background-position: -726px -242px}.sbsprite-emerald_generator_10 { background-position: -748px -242px}.sbsprite-emerald_generator_11 { background-position: -770px -242px}.sbsprite-bestiary_catacombs { background-position: -792px -242px}.sbsprite-fine_amber_gem { background-position: -814px -242px}.sbsprite-beach_ball_personality { background-position: -836px -242px}.sbsprite-cow_generator_11 { background-position: -858px -242px}.sbsprite-cow_generator_12 { background-position: -880px -242px}.sbsprite-mummy_personality { background-position: -902px -242px}.sbsprite-rune_wet { background-position: -924px -242px}.sbsprite-jumbo_backpack_upgrade { background-position: -946px -242px}.sbsprite-shadow_assassin_admiral { background-position: -968px -242px}.sbsprite-beating_heart { background-position: -990px -242px}.sbsprite-giant_tooth { background-position: -1012px -242px}.sbsprite-black_large_backpack { background-position: -1034px -242px}.sbsprite-corleonite { background-position: 0 -264px}.sbsprite-magma_cube_generator_1 { background-position: -22px -264px}.sbsprite-magma_cube_generator_5 { background-position: -44px -264px}.sbsprite-gold_candy { background-position: -66px -264px}.sbsprite-magma_cube_generator_4 { background-position: -88px -264px}.sbsprite-magma_cube_generator_3 { background-position: -110px -264px}.sbsprite-magma_cube_generator_2 { background-position: -132px -264px}.sbsprite-magma_cube_generator_9 { background-position: -154px -264px}.sbsprite-dining_table { background-position: -176px -264px}.sbsprite-magma_cube_generator_8 { background-position: -198px -264px}.sbsprite-magma_cube_generator_7 { background-position: -220px -264px}.sbsprite-magma_cube_generator_6 { background-position: -242px -264px}.sbsprite-sadan_brooch { background-position: -264px -264px}.sbsprite-birch_generator_11 { background-position: -286px -264px}.sbsprite-birch_generator_10 { background-position: -308px -264px}.sbsprite-strong_dragon_helmet { background-position: -330px -264px}.sbsprite-greater_enchanted_chest_upgrade { background-position: -352px -264px}.sbsprite-pink_frosted_donut_11 { background-position: -374px -264px}.sbsprite-molten_cube { background-position: -396px -264px}.sbsprite-pink_frosted_donut_10 { background-position: -418px -264px}.sbsprite-ultimate_carrot_candy_upgrade { background-position: -440px -264px}.sbsprite-old_baby { background-position: -462px -264px}.sbsprite-coin_lapis { background-position: -484px -264px}.sbsprite-superior_shimmer { background-position: -506px -264px}.sbsprite-diver_fragment { background-position: -528px -264px}.sbsprite-blue_greater_backpack { background-position: -550px -264px}.sbsprite-piggy_bank { background-position: -572px -264px}.sbsprite-flawed_jade_gem { background-position: -594px -264px}.sbsprite-dungeon_boss_key { background-position: -616px -264px}.sbsprite-spider_catalyst { background-position: -638px -264px}.sbsprite-shark_scale_helmet { background-position: -660px -264px}.sbsprite-ghost_book { background-position: -682px -264px}.sbsprite-titanium_alloy { background-position: -704px -264px}.sbsprite-pet_skin_enderman_slayer { background-position: -726px -264px}.sbsprite-hegemony_artifact { background-position: -748px -264px}.sbsprite-potion_affinity_talisman { background-position: -770px -264px}.sbsprite-trick_or_treat_bag { background-position: -792px -264px}.sbsprite-fake_gold_ring { background-position: -814px -264px}.sbsprite-dr_paper { background-position: -836px -264px}.sbsprite-fuel_tank { background-position: -858px -264px}.sbsprite-rough_amethyst_gem { background-position: -880px -264px}.sbsprite-flawless_sapphire_gem { background-position: -902px -264px}.sbsprite-pink_small_backpack { background-position: -924px -264px}.sbsprite-cow_generator_10 { background-position: -946px -264px}.sbsprite-mithril_infusion { background-position: -968px -264px}.sbsprite-beastmaster_crest_common { background-position: -990px -264px}.sbsprite-shiny_relic { background-position: -1012px -264px}.sbsprite-concentrated_stone { background-position: -1034px -264px}.sbsprite-sloth_personality { background-position: 0 -286px}.sbsprite-stocking { background-position: -22px -286px}.sbsprite-egg_pile { background-position: -44px -286px}.sbsprite-blessing_of_wisdom { background-position: -66px -286px}.sbsprite-happy_snowman { background-position: -88px -286px}.sbsprite-gingerbread_10 { background-position: -110px -286px}.sbsprite-gingerbread_11 { background-position: -132px -286px}.sbsprite-diamond_generator_11 { background-position: -154px -286px}.sbsprite-diamond_generator_10 { background-position: -176px -286px}.sbsprite-medium_backpack { background-position: -198px -286px}.sbsprite-rune_white_spiral { background-position: -220px -286px}.sbsprite-diamond_generator_12 { background-position: -242px -286px}.sbsprite-blacksmith_plus { background-position: -264px -286px}.sbsprite-light_blue_greater_backpack { background-position: -286px -286px}.sbsprite-watcher_eye { background-position: -308px -286px}.sbsprite-pet_skin_silverfish { background-position: -330px -286px}.sbsprite-rough_ruby_gem { background-position: -352px -286px}.sbsprite-fine_amethyst_gem { background-position: -374px -286px}.sbsprite-flawed_topaz_gem { background-position: -396px -286px}.sbsprite-spirit_bone { background-position: -418px -286px}.sbsprite-snow_blaster { background-position: -440px -286px}.sbsprite-unknown_item { background-position: -462px -286px}.sbsprite-spider_essence { background-position: -484px -286px}.sbsprite-light_bait { background-position: -506px -286px}.sbsprite-beastmaster_crest_legendary { background-position: -528px -286px}.sbsprite-mayor_diana { background-position: -550px -286px}.sbsprite-enchanted_jack_o_lantern { background-position: -572px -286px}.sbsprite-medium_foraging_sack { background-position: -594px -286px}.sbsprite-emerald_chest { background-position: -616px -286px}.sbsprite-carrot_generator_6 { background-position: -638px -286px}.sbsprite-reindeer_11 { background-position: -660px -286px}.sbsprite-carrot_generator_7 { background-position: -682px -286px}.sbsprite-reindeer_10 { background-position: -704px -286px}.sbsprite-carrot_generator_4 { background-position: -726px -286px}.sbsprite-carrot_generator_5 { background-position: -748px -286px}.sbsprite-carrot_generator_2 { background-position: -770px -286px}.sbsprite-carrot_generator_3 { background-position: -792px -286px}.sbsprite-carrot_generator_1 { background-position: -814px -286px}.sbsprite-carrot_generator_8 { background-position: -836px -286px}.sbsprite-dragon_scale { background-position: -858px -286px}.sbsprite-carrot_generator_9 { background-position: -880px -286px}.sbsprite-protector_dragon_helmet { background-position: -902px -286px}.sbsprite-rune_hearts { background-position: -924px -286px}.sbsprite-pet_skin_sheep_magenta { background-position: -946px -286px}.sbsprite-shadow_assassin_helmet { background-position: -968px -286px}.sbsprite-gemstone_gauntlet_gold { background-position: -990px -286px}.sbsprite-lucky_dice { background-position: -1012px -286px}.sbsprite-wolf_ring { background-position: -1034px -286px}.sbsprite-haunt_ability { background-position: 0 -308px}.sbsprite-undead_essence { background-position: -22px -308px}.sbsprite-bitter_ice_tea { background-position: -44px -308px}.sbsprite-beastmaster_crest_rare { background-position: -66px -308px}.sbsprite-enchanted_titanium { background-position: -88px -308px}.sbsprite-red_claw_talisman { background-position: -110px -308px}.sbsprite-intimidation_talisman { background-position: -132px -308px}.sbsprite-ice_bait { background-position: -154px -308px}.sbsprite-empty_soda_can { background-position: -176px -308px}.sbsprite-jerry_candy { background-position: -198px -308px}.sbsprite-ghast_generator_3 { background-position: -220px -308px}.sbsprite-fancy_flower_pot { background-position: -242px -308px}.sbsprite-ghast_generator_2 { background-position: -264px -308px}.sbsprite-cyan_greater_backpack { background-position: -286px -308px}.sbsprite-ghast_generator_5 { background-position: -308px -308px}.sbsprite-ghast_generator_4 { background-position: -330px -308px}.sbsprite-ghast_generator_7 { background-position: -352px -308px}.sbsprite-cold_ones { background-position: -374px -308px}.sbsprite-ghast_generator_6 { background-position: -396px -308px}.sbsprite-mega_jerry_lure { background-position: -418px -308px}.sbsprite-ghast_generator_9 { background-position: -440px -308px}.sbsprite-rune_smokey { background-position: -462px -308px}.sbsprite-ghast_generator_8 { background-position: -484px -308px}.sbsprite-healer_dungeon_ability_2 { background-position: -506px -308px}.sbsprite-healer_dungeon_ability_3 { background-position: -528px -308px}.sbsprite-ghast_generator_1 { background-position: -550px -308px}.sbsprite-brown_medium_backpack { background-position: -572px -308px}.sbsprite-healer_dungeon_ability_1 { background-position: -594px -308px}.sbsprite-ice_cream_2 { background-position: -616px -308px}.sbsprite-ice_cream_1 { background-position: -638px -308px}.sbsprite-ice_cream_4 { background-position: -660px -308px}.sbsprite-ice_cream_3 { background-position: -682px -308px}.sbsprite-ice_cream_6 { background-position: -704px -308px}.sbsprite-ice_cream_5 { background-position: -726px -308px}.sbsprite-ice_cream_8 { background-position: -748px -308px}.sbsprite-ice_cream_7 { background-position: -770px -308px}.sbsprite-ice_cream_9 { background-position: -792px -308px}.sbsprite-ice_cream_10 { background-position: -814px -308px}.sbsprite-ice_cream_11 { background-position: -836px -308px}.sbsprite-coin_iron { background-position: -858px -308px}.sbsprite-chewed_gum { background-position: -880px -308px}.sbsprite-training_weights { background-position: -902px -308px}.sbsprite-orange_large_backpack { background-position: -924px -308px}.sbsprite-campfire_talisman_24 { background-position: -946px -308px}.sbsprite-campfire_talisman_25 { background-position: -968px -308px}.sbsprite-campfire_talisman_26 { background-position: -990px -308px}.sbsprite-campfire_talisman_27 { background-position: -1012px -308px}.sbsprite-campfire_talisman_28 { background-position: -1034px -308px}.sbsprite-campfire_talisman_29 { background-position: 0 -330px}.sbsprite-candle_table { background-position: -22px -330px}.sbsprite-jingle_bells { background-position: -44px -330px}.sbsprite-lynx_talisman { background-position: -66px -330px}.sbsprite-campfire_talisman_20 { background-position: -88px -330px}.sbsprite-campfire_talisman_21 { background-position: -110px -330px}.sbsprite-campfire_talisman_22 { background-position: -132px -330px}.sbsprite-campfire_talisman_23 { background-position: -154px -330px}.sbsprite-perfect_ruby_gem { background-position: -176px -330px}.sbsprite-pet_skin_megalodon_baby { background-position: -198px -330px}.sbsprite-jungle_amulet { background-position: -220px -330px}.sbsprite-reaper_mask { background-position: -242px -330px}.sbsprite-enchanting_plus { background-position: -264px -330px}.sbsprite-catacombs_expert_ring { background-position: -286px -330px}.sbsprite-ice_knight_statue { background-position: -308px -330px}.sbsprite-bits_talisman { background-position: -330px -330px}.sbsprite-dark_orb { background-position: -352px -330px}.sbsprite-blessing_of_power { background-position: -374px -330px}.sbsprite-beastmaster_crest_epic { background-position: -396px -330px}.sbsprite-bulky_stone { background-position: -418px -330px}.sbsprite-yellow_small_backpack { background-position: -440px -330px}.sbsprite-small_potion_bag { background-position: -462px -330px}.sbsprite-green_jumbo_backpack { background-position: -484px -330px}.sbsprite-zombie_heart { background-position: -506px -330px}.sbsprite-pet_skin_black_cat_ivory { background-position: -528px -330px}.sbsprite-titanium_relic { background-position: -550px -330px}.sbsprite-fast_travel_jungle { background-position: -572px -330px}.sbsprite-pet_skin_rabbit { background-position: -594px -330px}.sbsprite-enderman_mask { background-position: -616px -330px}.sbsprite-perfect_amethyst_gem { background-position: -638px -330px}.sbsprite-boss_collection_sadan { background-position: -660px -330px}.sbsprite-blessing_of_stone { background-position: -682px -330px}.sbsprite-master_catacombs_pass_0 { background-position: -704px -330px}.sbsprite-snowman { background-position: -726px -330px}.sbsprite-candy_the_fish { background-position: -748px -330px}.sbsprite-gold_chest { background-position: -770px -330px}.sbsprite-master_catacombs_pass_6 { background-position: -792px -330px}.sbsprite-master_catacombs_pass_5 { background-position: -814px -330px}.sbsprite-master_catacombs_pass_8 { background-position: -836px -330px}.sbsprite-master_catacombs_pass_7 { background-position: -858px -330px}.sbsprite-master_catacombs_pass_2 { background-position: -880px -330px}.sbsprite-master_catacombs_pass_1 { background-position: -902px -330px}.sbsprite-master_catacombs_pass_4 { background-position: -924px -330px}.sbsprite-master_catacombs_pass_3 { background-position: -946px -330px}.sbsprite-candy_bowl { background-position: -968px -330px}.sbsprite-large_talisman_bag { background-position: -990px -330px}.sbsprite-secret_dungeon_redstone_key { background-position: -1012px -330px}.sbsprite-knockoff_cola { background-position: -1034px -330px}.sbsprite-grinch_2 { background-position: 0 -352px}.sbsprite-grinch_3 { background-position: -22px -352px}.sbsprite-grinch_4 { background-position: -44px -352px}.sbsprite-personal_bank_item { background-position: -66px -352px}.sbsprite-grinch_5 { background-position: -88px -352px}.sbsprite-grinch_6 { background-position: -110px -352px}.sbsprite-blessing_of_time { background-position: -132px -352px}.sbsprite-grinch_7 { background-position: -154px -352px}.sbsprite-grinch_8 { background-position: -176px -352px}.sbsprite-grinch_9 { background-position: -198px -352px}.sbsprite-crit_damage { background-position: -220px -352px}.sbsprite-grinch_1 { background-position: -242px -352px}.sbsprite-bunny_4 { background-position: -264px -352px}.sbsprite-bunny_3 { background-position: -286px -352px}.sbsprite-the_watchers_head { background-position: -308px -352px}.sbsprite-bunny_2 { background-position: -330px -352px}.sbsprite-bunny_1 { background-position: -352px -352px}.sbsprite-bunny_8 { background-position: -374px -352px}.sbsprite-bunny_7 { background-position: -396px -352px}.sbsprite-master_catacombs_pass_9 { background-position: -418px -352px}.sbsprite-bat_person_helmet { background-position: -440px -352px}.sbsprite-bunny_6 { background-position: -462px -352px}.sbsprite-bunny_5 { background-position: -484px -352px}.sbsprite-refined_amber { background-position: -506px -352px}.sbsprite-pet_skin_rock_derp { background-position: -528px -352px}.sbsprite-pet_skin_sheep_gray { background-position: -550px -352px}.sbsprite-flawed_amber_gem { background-position: -572px -352px}.sbsprite-pumpkin_11 { background-position: -594px -352px}.sbsprite-pumpkin_10 { background-position: -616px -352px}.sbsprite-white_small_backpack { background-position: -638px -352px}.sbsprite-blaze_hat { background-position: -660px -352px}.sbsprite-woodcutting_crystal { background-position: -682px -352px}.sbsprite-bunny_9 { background-position: -704px -352px}.sbsprite-roofed_forest_island { background-position: -726px -352px}.sbsprite-campfire_talisman_13 { background-position: -748px -352px}.sbsprite-campfire_talisman_14 { background-position: -770px -352px}.sbsprite-rune_lava { background-position: -792px -352px}.sbsprite-campfire_talisman_15 { background-position: -814px -352px}.sbsprite-campfire_talisman_16 { background-position: -836px -352px}.sbsprite-campfire_talisman_17 { background-position: -858px -352px}.sbsprite-campfire_talisman_18 { background-position: -880px -352px}.sbsprite-golden_dante_statue { background-position: -902px -352px}.sbsprite-campfire_talisman_19 { background-position: -924px -352px}.sbsprite-foraging_4_portal { background-position: -946px -352px}.sbsprite-new_year_cake_bag { background-position: -968px -352px}.sbsprite-santa_personality { background-position: -990px -352px}.sbsprite-campfire_talisman_10 { background-position: -1012px -352px}.sbsprite-campfire_talisman_11 { background-position: -1034px -352px}.sbsprite-campfire_talisman_12 { background-position: 0 -374px}.sbsprite-jerry_stone { background-position: -22px -374px}.sbsprite-cyclops_personality { background-position: -44px -374px}.sbsprite-desert_island_crystal { background-position: -66px -374px}.sbsprite-happy_emoji_personality { background-position: -88px -374px}.sbsprite-rough_sapphire_gem { background-position: -110px -374px}.sbsprite-fallen_star_hat { background-position: -132px -374px}.sbsprite-blaze_generator_10 { background-position: -154px -374px}.sbsprite-blaze_generator_11 { background-position: -176px -374px}.sbsprite-goblin_omelette_blue_cheese { background-position: -198px -374px}.sbsprite-treasure_artifact { background-position: -220px -374px}.sbsprite-hermit_crab_personality { background-position: -242px -374px}.sbsprite-orange { background-position: -264px -374px}.sbsprite-pond_island { background-position: -286px -374px}.sbsprite-fast_travel_void { background-position: -308px -374px}.sbsprite-transmission_tuner { background-position: -330px -374px}.sbsprite-bestiary_the_end { background-position: -352px -374px}.sbsprite-danger_1_portal { background-position: -374px -374px}.sbsprite-pink_jumbo_backpack { background-position: -396px -374px}.sbsprite-sea_walker_helmet { background-position: -418px -374px}.sbsprite-wise_fragment { background-position: -440px -374px}.sbsprite-jerry_talisman_golden { background-position: -462px -374px}.sbsprite-superior_baby { background-position: -484px -374px}.sbsprite-flower_bed { background-position: -506px -374px}.sbsprite-cactus_generator_1 { background-position: -528px -374px}.sbsprite-endstone_geode { background-position: -550px -374px}.sbsprite-holy_baby { background-position: -572px -374px}.sbsprite-cactus_generator_3 { background-position: -594px -374px}.sbsprite-cactus_generator_2 { background-position: -616px -374px}.sbsprite-cactus_generator_5 { background-position: -638px -374px}.sbsprite-cactus_generator_4 { background-position: -660px -374px}.sbsprite-cactus_generator_7 { background-position: -682px -374px}.sbsprite-cactus_generator_6 { background-position: -704px -374px}.sbsprite-cactus_generator_9 { background-position: -726px -374px}.sbsprite-protector_shimmer { background-position: -748px -374px}.sbsprite-cactus_generator_8 { background-position: -770px -374px}.sbsprite-rune_sparkling { background-position: -792px -374px}.sbsprite-bingo_ring { background-position: -814px -374px}.sbsprite-griffin_upgrade_stone_rare { background-position: -836px -374px}.sbsprite-chick_nest { background-position: -858px -374px}.sbsprite-solved_prism { background-position: -880px -374px}.sbsprite-king_talisman { background-position: -902px -374px}.sbsprite-treasure_ring { background-position: -924px -374px}.sbsprite-black_medium_backpack { background-position: -946px -374px}.sbsprite-surfboard { background-position: -968px -374px}.sbsprite-mithril_fuel_tank { background-position: -990px -374px}.sbsprite-fast_travel_home { background-position: -1012px -374px}.sbsprite-water_trough { background-position: -1034px -374px}.sbsprite-mayor_dante { background-position: 0 -396px}.sbsprite-cheese_fuel { background-position: -22px -396px}.sbsprite-pet_skin_lion_lioness { background-position: -44px -396px}.sbsprite-pink_bunny_personality { background-position: -66px -396px}.sbsprite-goldor_the_fish { background-position: -88px -396px}.sbsprite-speed_wither_helmet { background-position: -110px -396px}.sbsprite-pink_medium_backpack { background-position: -132px -396px}.sbsprite-mayor_derpy { background-position: -154px -396px}.sbsprite-talisman_enrichment_health { background-position: -176px -396px}.sbsprite-enderpack { background-position: -198px -396px}.sbsprite-pet_skin_rock_thinking { background-position: -220px -396px}.sbsprite-soul_fragment { background-position: -242px -396px}.sbsprite-skyblock_chair { background-position: -264px -396px}.sbsprite-mayor_paul { background-position: -286px -396px}.sbsprite-autopet_rules_2 { background-position: -308px -396px}.sbsprite-bat_talisman { background-position: -330px -396px}.sbsprite-killer_4 { background-position: -352px -396px}.sbsprite-killer_5 { background-position: -374px -396px}.sbsprite-killer_6 { background-position: -396px -396px}.sbsprite-killer_7 { background-position: -418px -396px}.sbsprite-killer_8 { background-position: -440px -396px}.sbsprite-killer_9 { background-position: -462px -396px}.sbsprite-builder_appalled_pumpkin { background-position: -484px -396px}.sbsprite-holy_shimmer { background-position: -506px -396px}.sbsprite-royal_pigeon { background-position: -528px -396px}.sbsprite-life_preserver { background-position: -550px -396px}.sbsprite-killer_1 { background-position: -572px -396px}.sbsprite-killer_2 { background-position: -594px -396px}.sbsprite-killer_3 { background-position: -616px -396px}.sbsprite-pet_skin_rock_cool { background-position: -638px -396px}.sbsprite-dingy { background-position: -660px -396px}.sbsprite-intimidation_ring { background-position: -682px -396px}.sbsprite-easter_egg_6 { background-position: -704px -396px}.sbsprite-builder_kiwi { background-position: -726px -396px}.sbsprite-easter_egg_5 { background-position: -748px -396px}.sbsprite-easter_egg_4 { background-position: -770px -396px}.sbsprite-rough_jade_gem { background-position: -792px -396px}.sbsprite-easter_egg_3 { background-position: -814px -396px}.sbsprite-easter_egg_2 { background-position: -836px -396px}.sbsprite-easter_egg_1 { background-position: -858px -396px}.sbsprite-snow_generator_11 { background-position: -880px -396px}.sbsprite-snow_generator_10 { background-position: -902px -396px}.sbsprite-easter_egg_9 { background-position: -924px -396px}.sbsprite-easter_egg_8 { background-position: -946px -396px}.sbsprite-easter_egg_7 { background-position: -968px -396px}.sbsprite-medium_gemstone_sack { background-position: -990px -396px}.sbsprite-large_enchanted_agronomy_sack { background-position: -1012px -396px}.sbsprite-blessed_fruit { background-position: -1034px -396px}.sbsprite-dungeon_stone_archer { background-position: 0 -418px}.sbsprite-arrow_swapper { background-position: -22px -418px}.sbsprite-snow_cannon { background-position: -44px -418px}.sbsprite-jerry_box_mega { background-position: -66px -418px}.sbsprite-pet_skin_sheep_brown { background-position: -88px -418px}.sbsprite-brewing_plus { background-position: -110px -418px}.sbsprite-mayor_barry { background-position: -132px -418px}.sbsprite-bat_ring { background-position: -154px -418px}.sbsprite-candle_arch { background-position: -176px -418px}.sbsprite-mithril_plate { background-position: -198px -418px}.sbsprite-carrot_bait { background-position: -220px -418px}.sbsprite-speed_artifact { background-position: -242px -418px}.sbsprite-salmon_hat { background-position: -264px -418px}.sbsprite-mini_sandcastle { background-position: -286px -418px}.sbsprite-scavenger_talisman { background-position: -308px -418px}.sbsprite-fast_travel_kuudra { background-position: -330px -418px}.sbsprite-foraging_fortune { background-position: -352px -418px}.sbsprite-bunny_personality { background-position: -374px -418px}.sbsprite-sandcastle_personality { background-position: -396px -418px}.sbsprite-undead_11 { background-position: -418px -418px}.sbsprite-magenta_jumbo_backpack { background-position: -440px -418px}.sbsprite-undead_10 { background-position: -462px -418px}.sbsprite-diamond_necron_head { background-position: -484px -418px}.sbsprite-wet_pumpkin { background-position: -506px -418px}.sbsprite-gemstone_gauntlet { background-position: -528px -418px}.sbsprite-cobblestone_generator_9 { background-position: -550px -418px}.sbsprite-cobblestone_generator_8 { background-position: -572px -418px}.sbsprite-iron_generator_1 { background-position: -594px -418px}.sbsprite-cobblestone_generator_7 { background-position: -616px -418px}.sbsprite-control_switch { background-position: -638px -418px}.sbsprite-iron_generator_2 { background-position: -660px -418px}.sbsprite-cobblestone_generator_6 { background-position: -682px -418px}.sbsprite-pumpkin_bomb { background-position: -704px -418px}.sbsprite-cobblestone_generator_5 { background-position: -726px -418px}.sbsprite-cobblestone_generator_4 { background-position: -748px -418px}.sbsprite-dwarven_tankard { background-position: -770px -418px}.sbsprite-jerry_talisman_purple { background-position: -792px -418px}.sbsprite-cobblestone_generator_3 { background-position: -814px -418px}.sbsprite-cobblestone_generator_2 { background-position: -836px -418px}.sbsprite-reindeer_plush { background-position: -858px -418px}.sbsprite-cobblestone_generator_1 { background-position: -880px -418px}.sbsprite-big_xtree { background-position: -902px -418px}.sbsprite-farming_island { background-position: -924px -418px}.sbsprite-rune_endersnake { background-position: -946px -418px}.sbsprite-rune { background-position: -968px -418px}.sbsprite-sweet_flesh { background-position: -990px -418px}.sbsprite-shark_10 { background-position: -1012px -418px}.sbsprite-shark_12 { background-position: -1034px -418px}.sbsprite-viking_tear { background-position: 0 -440px}.sbsprite-shark_11 { background-position: -22px -440px}.sbsprite-iron_generator_7 { background-position: -44px -440px}.sbsprite-iron_generator_8 { background-position: -66px -440px}.sbsprite-iron_generator_9 { background-position: -88px -440px}.sbsprite-beacon_skull { background-position: -110px -440px}.sbsprite-coin_gold_2 { background-position: -132px -440px}.sbsprite-iron_generator_3 { background-position: -154px -440px}.sbsprite-iron_generator_4 { background-position: -176px -440px}.sbsprite-sea_creature_ring { background-position: -198px -440px}.sbsprite-iron_generator_5 { background-position: -220px -440px}.sbsprite-iron_generator_6 { background-position: -242px -440px}.sbsprite-nether_warts_generator_7 { background-position: -264px -440px}.sbsprite-nether_warts_generator_8 { background-position: -286px -440px}.sbsprite-nether_warts_generator_9 { background-position: -308px -440px}.sbsprite-nether_warts_generator_3 { background-position: -330px -440px}.sbsprite-wolf_fur_mixin { background-position: -352px -440px}.sbsprite-mayor_marina { background-position: -374px -440px}.sbsprite-candy_ring { background-position: -396px -440px}.sbsprite-nether_warts_generator_4 { background-position: -418px -440px}.sbsprite-nether_warts_generator_5 { background-position: -440px -440px}.sbsprite-nether_warts_generator_6 { background-position: -462px -440px}.sbsprite-large_backpack { background-position: -484px -440px}.sbsprite-fine_sapphire_gem { background-position: -506px -440px}.sbsprite-nether_warts_generator_1 { background-position: -528px -440px}.sbsprite-nether_warts_generator_2 { background-position: -550px -440px}.sbsprite-griffin_upgrade_stone_uncommon { background-position: -572px -440px}.sbsprite-grey_greater_backpack { background-position: -594px -440px}.sbsprite-shiny_orb { background-position: -616px -440px}.sbsprite-large_enchanted_husbandry_sack { background-position: -638px -440px}.sbsprite-milk_cookies { background-position: -660px -440px}.sbsprite-spider_artifact { background-position: -682px -440px}.sbsprite-green_gift { background-position: -704px -440px}.sbsprite-fast_travel_park { background-position: -726px -440px}.sbsprite-jungle_heart { background-position: -748px -440px}.sbsprite-toil_log { background-position: -770px -440px}.sbsprite-absolute_ender_pearl { background-position: -792px -440px}.sbsprite-catacombs_pass_10 { background-position: -814px -440px}.sbsprite-protector_fragment { background-position: -836px -440px}.sbsprite-ice_generator_1 { background-position: -858px -440px}.sbsprite-ice_generator_2 { background-position: -880px -440px}.sbsprite-old_fragment { background-position: -902px -440px}.sbsprite-ice_generator_3 { background-position: -924px -440px}.sbsprite-traveling_zoo { background-position: -946px -440px}.sbsprite-ice_generator_4 { background-position: -968px -440px}.sbsprite-ice_generator_5 { background-position: -990px -440px}.sbsprite-ice_generator_6 { background-position: -1012px -440px}.sbsprite-ice_generator_7 { background-position: -1034px -440px}.sbsprite-ice_generator_8 { background-position: 0 -462px}.sbsprite-ice_generator_9 { background-position: -22px -462px}.sbsprite-lady_bug_personality { background-position: -44px -462px}.sbsprite-pet_skin_rock_laugh { background-position: -66px -462px}.sbsprite-experimentation_table { background-position: -88px -462px}.sbsprite-titanium_ore { background-position: -110px -462px}.sbsprite-blue_medium_backpack { background-position: -132px -462px}.sbsprite-ice_sofa { background-position: -154px -462px}.sbsprite-rune_lightning { background-position: -176px -462px}.sbsprite-tarantula_talisman { background-position: -198px -462px}.sbsprite-mayor_aatrox { background-position: -220px -462px}.sbsprite-race_crystal_core { background-position: -242px -462px}.sbsprite-black_cat_plush { background-position: -264px -462px}.sbsprite-small_agronomy_sack { background-position: -286px -462px}.sbsprite-magenta_greater_backpack { background-position: -308px -462px}.sbsprite-pet_skin_sheep_light_gray { background-position: -330px -462px}.sbsprite-diamond_scarf_head { background-position: -352px -462px}.sbsprite-hay_bed { background-position: -374px -462px}.sbsprite-talisman_enrichment_sea_creature_chance { background-position: -396px -462px}.sbsprite-strong_shimmer { background-position: -418px -462px}.sbsprite-shady_ring { background-position: -440px -462px}.sbsprite-dante_talisman { background-position: -462px -462px}.sbsprite-pink_bunny_1 { background-position: -484px -462px}.sbsprite-black_greater_backpack { background-position: -506px -462px}.sbsprite-builder_cactus { background-position: -528px -462px}.sbsprite-magenta_small_backpack { background-position: -550px -462px}.sbsprite-talisman_enrichment_defense { background-position: -572px -462px}.sbsprite-pink_bunny_3 { background-position: -594px -462px}.sbsprite-talisman_enrichment_magic_find { background-position: -616px -462px}.sbsprite-pink_bunny_2 { background-position: -638px -462px}.sbsprite-pink_bunny_5 { background-position: -660px -462px}.sbsprite-pink_bunny_4 { background-position: -682px -462px}.sbsprite-salmon_opal { background-position: -704px -462px}.sbsprite-pink_bunny_7 { background-position: -726px -462px}.sbsprite-pink_bunny_6 { background-position: -748px -462px}.sbsprite-pink_bunny_9 { background-position: -770px -462px}.sbsprite-pink_bunny_8 { background-position: -792px -462px}.sbsprite-refined_mithril { background-position: -814px -462px}.sbsprite-happy_emoji_10 { background-position: -836px -462px}.sbsprite-happy_emoji_11 { background-position: -858px -462px}.sbsprite-mine_talisman { background-position: -880px -462px}.sbsprite-old_dragon_helmet { background-position: -902px -462px}.sbsprite-boss_collection_livid { background-position: -924px -462px}.sbsprite-green_small_backpack { background-position: -946px -462px}.sbsprite-rune_bite { background-position: -968px -462px}.sbsprite-jungle_generator_11 { background-position: -990px -462px}.sbsprite-mega_luck { background-position: -1012px -462px}.sbsprite-jungle_generator_10 { background-position: -1034px -462px}.sbsprite-pet_skin_chicken_baby_chick { background-position: 0 -484px}.sbsprite-pile_of_cash { background-position: -22px -484px}.sbsprite-dungeoneering { background-position: -44px -484px}.sbsprite-base_griffin_upgrade_stone { background-position: -66px -484px}.sbsprite-red_tent { background-position: -88px -484px}.sbsprite-dungeon_red_support_orb { background-position: -110px -484px}.sbsprite-fast_travel_nether { background-position: -132px -484px}.sbsprite-night_vision_charm { background-position: -154px -484px}.sbsprite-zombie_grave { background-position: -176px -484px}.sbsprite-fish_bait { background-position: -198px -484px}.sbsprite-ice_lolly_personality { background-position: -220px -484px}.sbsprite-grizzly_paw { background-position: -242px -484px}.sbsprite-large_potion_bag { background-position: -264px -484px}.sbsprite-poorly_wrapped_rock { background-position: -286px -484px}.sbsprite-drill_engine { background-position: -308px -484px}.sbsprite-dark_oak_generator_10 { background-position: -330px -484px}.sbsprite-dungeon_normal_key { background-position: -352px -484px}.sbsprite-dark_oak_generator_11 { background-position: -374px -484px}.sbsprite-unstable_shimmer { background-position: -396px -484px}.sbsprite-green_egg { background-position: -418px -484px}.sbsprite-rough_topaz_gem { background-position: -440px -484px}.sbsprite-mana_flux_power_orb { background-position: -462px -484px}.sbsprite-amber_material { background-position: -484px -484px}.sbsprite-grinch_personality { background-position: -506px -484px}.sbsprite-fast_travel_crystals { background-position: -528px -484px}.sbsprite-lapis_generator_2 { background-position: -550px -484px}.sbsprite-lapis_generator_3 { background-position: -572px -484px}.sbsprite-rune_sack { background-position: -594px -484px}.sbsprite-lapis_generator_4 { background-position: -616px -484px}.sbsprite-tightly_tied_hay_bale { background-position: -638px -484px}.sbsprite-beach_ball { background-position: -660px -484px}.sbsprite-lapis_generator_5 { background-position: -682px -484px}.sbsprite-lapis_generator_10 { background-position: -704px -484px}.sbsprite-lapis_generator_12 { background-position: -726px -484px}.sbsprite-light_grey_large_backpack { background-position: -748px -484px}.sbsprite-lapis_generator_1 { background-position: -770px -484px}.sbsprite-lapis_generator_11 { background-position: -792px -484px}.sbsprite-pet_item_quick_claw { background-position: -814px -484px}.sbsprite-basketball_9 { background-position: -836px -484px}.sbsprite-deck_chair { background-position: -858px -484px}.sbsprite-lady_bug_9 { background-position: -880px -484px}.sbsprite-basketball_8 { background-position: -902px -484px}.sbsprite-lady_bug_8 { background-position: -924px -484px}.sbsprite-basketball_7 { background-position: -946px -484px}.sbsprite-basketball_6 { background-position: -968px -484px}.sbsprite-rune_pestilence { background-position: -990px -484px}.sbsprite-basketball_5 { background-position: -1012px -484px}.sbsprite-mithril_generator_12 { background-position: -1034px -484px}.sbsprite-sea_creature_talisman { background-position: 0 -506px}.sbsprite-basketball_4 { background-position: -22px -506px}.sbsprite-mithril_generator_11 { background-position: -44px -506px}.sbsprite-basketball_3 { background-position: -66px -506px}.sbsprite-mithril_generator_10 { background-position: -88px -506px}.sbsprite-basketball_2 { background-position: -110px -506px}.sbsprite-blue_egg { background-position: -132px -506px}.sbsprite-basketball_1 { background-position: -154px -506px}.sbsprite-lady_bug_1 { background-position: -176px -506px}.sbsprite-emerald_ring { background-position: -198px -506px}.sbsprite-lady_bug_3 { background-position: -220px -506px}.sbsprite-lady_bug_2 { background-position: -242px -506px}.sbsprite-lady_bug_5 { background-position: -264px -506px}.sbsprite-lapis_generator_6 { background-position: -286px -506px}.sbsprite-epoch_cake_green { background-position: -308px -506px}.sbsprite-lady_bug_4 { background-position: -330px -506px}.sbsprite-lapis_generator_7 { background-position: -352px -506px}.sbsprite-medium_husbandry_sack { background-position: -374px -506px}.sbsprite-bunny_11 { background-position: -396px -506px}.sbsprite-lady_bug_7 { background-position: -418px -506px}.sbsprite-lapis_generator_8 { background-position: -440px -506px}.sbsprite-bunny_10 { background-position: -462px -506px}.sbsprite-candy_relic { background-position: -484px -506px}.sbsprite-lady_bug_6 { background-position: -506px -506px}.sbsprite-lapis_generator_9 { background-position: -528px -506px}.sbsprite-red_jumbo_backpack { background-position: -550px -506px}.sbsprite-holy_fragment { background-position: -572px -506px}.sbsprite-ice_cream_personality { background-position: -594px -506px}.sbsprite-dungeon_blue_support_orb { background-position: -616px -506px}.sbsprite-blaze_generator_4 { background-position: -638px -506px}.sbsprite-blaze_generator_3 { background-position: -660px -506px}.sbsprite-blaze_generator_2 { background-position: -682px -506px}.sbsprite-blaze_generator_1 { background-position: -704px -506px}.sbsprite-blaze_generator_8 { background-position: -726px -506px}.sbsprite-blaze_generator_7 { background-position: -748px -506px}.sbsprite-pet_skin_whale_orca { background-position: -770px -506px}.sbsprite-blaze_generator_6 { background-position: -792px -506px}.sbsprite-blaze_generator_5 { background-position: -814px -506px}.sbsprite-deadgehog_helmet { background-position: -836px -506px}.sbsprite-volta { background-position: -858px -506px}.sbsprite-blaze_generator_9 { background-position: -880px -506px}.sbsprite-frozen_chicken { background-position: -902px -506px}.sbsprite-pet_skin_dragon_neon_purple { background-position: -924px -506px}.sbsprite-cavespider_generator_6 { background-position: -946px -506px}.sbsprite-cavespider_generator_5 { background-position: -968px -506px}.sbsprite-rune_gem { background-position: -990px -506px}.sbsprite-cavespider_generator_8 { background-position: -1012px -506px}.sbsprite-cavespider_generator_7 { background-position: -1034px -506px}.sbsprite-cavespider_generator_2 { background-position: 0 -528px}.sbsprite-cavespider_generator_1 { background-position: -22px -528px}.sbsprite-cavespider_generator_4 { background-position: -44px -528px}.sbsprite-jerry_talisman_blue { background-position: -66px -528px}.sbsprite-cavespider_generator_3 { background-position: -88px -528px}.sbsprite-speed_talisman { background-position: -110px -528px}.sbsprite-mummy_1 { background-position: -132px -528px}.sbsprite-rabbit_hat { background-position: -154px -528px}.sbsprite-bat_person_ring { background-position: -176px -528px}.sbsprite-mummy_3 { background-position: -198px -528px}.sbsprite-cavespider_generator_9 { background-position: -220px -528px}.sbsprite-mummy_2 { background-position: -242px -528px}.sbsprite-mummy_5 { background-position: -264px -528px}.sbsprite-strong_baby { background-position: -286px -528px}.sbsprite-mummy_4 { background-position: -308px -528px}.sbsprite-mummy_7 { background-position: -330px -528px}.sbsprite-mummy_6 { background-position: -352px -528px}.sbsprite-spooky_helmet { background-position: -374px -528px}.sbsprite-dining_chair { background-position: -396px -528px}.sbsprite-mummy_9 { background-position: -418px -528px}.sbsprite-mummy_8 { background-position: -440px -528px}.sbsprite-ender_relic { background-position: -462px -528px}.sbsprite-flawed_jasper_gem { background-position: -484px -528px}.sbsprite-cactus_generator_10 { background-position: -506px -528px}.sbsprite-pet_skin_silverfish_fossilized { background-position: -528px -528px}.sbsprite-cactus_generator_11 { background-position: -550px -528px}.sbsprite-cactus_generator_12 { background-position: -572px -528px}.sbsprite-dark_goggles { background-position: -594px -528px}.sbsprite-starred_bonzo_mask { background-position: -616px -528px}.sbsprite-pigs_foot { background-position: -638px -528px}.sbsprite-gemstone_mixture { background-position: -660px -528px}.sbsprite-tarantula_black_widow { background-position: -682px -528px}.sbsprite-builder_berry_bush { background-position: -704px -528px}.sbsprite-chicken_head { background-position: -726px -528px}.sbsprite-pet_skin_elephant_purple { background-position: -748px -528px}.sbsprite-cow_head { background-position: -770px -528px}.sbsprite-witch_broomstick { background-position: -792px -528px}.sbsprite-pet_skin_monkey_gorilla { background-position: -814px -528px}.sbsprite-grey_large_backpack { background-position: -836px -528px}.sbsprite-pet_skin_sheep_neon_green { background-position: -858px -528px}.sbsprite-magic_mushroom_soup { background-position: -880px -528px}.sbsprite-petrified_starfall { background-position: -902px -528px}.sbsprite-spruce_generator_9 { background-position: -924px -528px}.sbsprite-second_master_star { background-position: -946px -528px}.sbsprite-sled { background-position: -968px -528px}.sbsprite-spruce_generator_1 { background-position: -990px -528px}.sbsprite-voidling_generator_2 { background-position: -1012px -528px}.sbsprite-red { background-position: -1034px -528px}.sbsprite-spirit_wing { background-position: 0 -550px}.sbsprite-spruce_generator_2 { background-position: -22px -550px}.sbsprite-voidling_generator_1 { background-position: -44px -550px}.sbsprite-spruce_generator_3 { background-position: -66px -550px}.sbsprite-voidling_generator_4 { background-position: -88px -550px}.sbsprite-spruce_generator_4 { background-position: -110px -550px}.sbsprite-voidling_generator_3 { background-position: -132px -550px}.sbsprite-spruce_generator_5 { background-position: -154px -550px}.sbsprite-voidling_generator_6 { background-position: -176px -550px}.sbsprite-spruce_generator_6 { background-position: -198px -550px}.sbsprite-voidling_generator_5 { background-position: -220px -550px}.sbsprite-spruce_generator_7 { background-position: -242px -550px}.sbsprite-voidling_generator_8 { background-position: -264px -550px}.sbsprite-spruce_generator_8 { background-position: -286px -550px}.sbsprite-voidling_generator_7 { background-position: -308px -550px}.sbsprite-voidling_generator_9 { background-position: -330px -550px}.sbsprite-magenta_large_backpack { background-position: -352px -550px}.sbsprite-fast_travel_end { background-position: -374px -550px}.sbsprite-cow_generator_8 { background-position: -396px -550px}.sbsprite-cow_generator_9 { background-position: -418px -550px}.sbsprite-present_1 { background-position: -440px -550px}.sbsprite-topaz_crystal { background-position: -462px -550px}.sbsprite-bestiary_private_island { background-position: -484px -550px}.sbsprite-present_2 { background-position: -506px -550px}.sbsprite-present_3 { background-position: -528px -550px}.sbsprite-cow_generator_1 { background-position: -550px -550px}.sbsprite-cow_generator_2 { background-position: -572px -550px}.sbsprite-dragon_horn { background-position: -594px -550px}.sbsprite-bat_artifact { background-position: -616px -550px}.sbsprite-cow_generator_3 { background-position: -638px -550px}.sbsprite-cow_generator_4 { background-position: -660px -550px}.sbsprite-cow_generator_5 { background-position: -682px -550px}.sbsprite-cow_generator_6 { background-position: -704px -550px}.sbsprite-cow_generator_7 { background-position: -726px -550px}.sbsprite-goblin_omelette_pesto { background-position: -748px -550px}.sbsprite-farming_2_portal { background-position: -770px -550px}.sbsprite-village_talisman { background-position: -792px -550px}.sbsprite-cheetah_talisman { background-position: -814px -550px}.sbsprite-mining_2_portal { background-position: -836px -550px}.sbsprite-present_8 { background-position: -858px -550px}.sbsprite-wood_talisman { background-position: -880px -550px}.sbsprite-present_9 { background-position: -902px -550px}.sbsprite-present_4 { background-position: -924px -550px}.sbsprite-present_5 { background-position: -946px -550px}.sbsprite-present_6 { background-position: -968px -550px}.sbsprite-present_7 { background-position: -990px -550px}.sbsprite-healing_ring { background-position: -1012px -550px}.sbsprite-titanium_artifact { background-position: -1034px -550px}.sbsprite-penguin_1 { background-position: 0 -572px}.sbsprite-penguin_2 { background-position: -22px -572px}.sbsprite-ruby_crystal { background-position: -44px -572px}.sbsprite-tiki_torch { background-position: -66px -572px}.sbsprite-wheat_generator_10 { background-position: -88px -572px}.sbsprite-emerald_generator_8 { background-position: -110px -572px}.sbsprite-wheat_generator_12 { background-position: -132px -572px}.sbsprite-emerald_generator_7 { background-position: -154px -572px}.sbsprite-wheat_generator_11 { background-position: -176px -572px}.sbsprite-scarecrow { background-position: -198px -572px}.sbsprite-emerald_generator_9 { background-position: -220px -572px}.sbsprite-emerald_generator_4 { background-position: -242px -572px}.sbsprite-emerald_generator_3 { background-position: -264px -572px}.sbsprite-emerald_generator_6 { background-position: -286px -572px}.sbsprite-emerald_generator_5 { background-position: -308px -572px}.sbsprite-pet_skin_elephant_monochrome { background-position: -330px -572px}.sbsprite-emerald_generator_2 { background-position: -352px -572px}.sbsprite-emerald_generator_1 { background-position: -374px -572px}.sbsprite-flawless_topaz_gem { background-position: -396px -572px}.sbsprite-raw_soulflow { background-position: -418px -572px}.sbsprite-large_enchanted_mining_sack { background-position: -440px -572px}.sbsprite-gold_scarf_head { background-position: -462px -572px}.sbsprite-orange_medium_backpack { background-position: -484px -572px}.sbsprite-fine_jade_gem { background-position: -506px -572px}.sbsprite-white_gift { background-position: -528px -572px}.sbsprite-goblin_omelette_sunny_side { background-position: -550px -572px}.sbsprite-builder_brown_mushroom { background-position: -572px -572px}.sbsprite-giant_flesh { background-position: -594px -572px}.sbsprite-jumbo_backpack { background-position: -616px -572px}.sbsprite-eternal_flame_ring { background-position: -638px -572px}.sbsprite-wrapped_gift_for_juliette { background-position: -660px -572px}.sbsprite-enchanted_book_bundle_counter_strike { background-position: -682px -572px}.sbsprite-pet_item_toy_jerry { background-position: -704px -572px}.sbsprite-golden_plate { background-position: -726px -572px}.sbsprite-penguin_5 { background-position: -748px -572px}.sbsprite-grandfather_clock { background-position: -770px -572px}.sbsprite-penguin_6 { background-position: -792px -572px}.sbsprite-penguin_3 { background-position: -814px -572px}.sbsprite-pet_skin_elephant_orange { background-position: -836px -572px}.sbsprite-fast_travel_museum { background-position: -858px -572px}.sbsprite-penguin_4 { background-position: -880px -572px}.sbsprite-penguin_9 { background-position: -902px -572px}.sbsprite-penguin_7 { background-position: -924px -572px}.sbsprite-penguin_8 { background-position: -946px -572px}.sbsprite-light_grey_medium_backpack { background-position: -968px -572px}.sbsprite-blue_jumbo_backpack { background-position: -990px -572px}.sbsprite-cyan_small_backpack { background-position: -1012px -572px}.sbsprite-jade_crystal { background-position: -1034px -572px}.sbsprite-large_dungeon_sack { background-position: 0 -594px}.sbsprite-summoning_ring { background-position: -22px -594px}.sbsprite-dragon_essence { background-position: -44px -594px}.sbsprite-basket_of_seeds { background-position: -66px -594px}.sbsprite-bunny_jerry { background-position: -88px -594px}.sbsprite-perfect_jade_gem { background-position: -110px -594px}.sbsprite-spray_can { background-position: -132px -594px}.sbsprite-campfire_talisman_4 { background-position: -154px -594px}.sbsprite-campfire_talisman_5 { background-position: -176px -594px}.sbsprite-campfire_talisman_2 { background-position: -198px -594px}.sbsprite-campfire_talisman_3 { background-position: -220px -594px}.sbsprite-remnant_of_the_eye { background-position: -242px -594px}.sbsprite-campfire_talisman_1 { background-position: -264px -594px}.sbsprite-talisman_enrichment_critical_chance { background-position: -286px -594px}.sbsprite-ghast_head { background-position: -308px -594px}.sbsprite-white_greater_backpack { background-position: -330px -594px}.sbsprite-mayor_diaz { background-position: -352px -594px}.sbsprite-campfire_talisman_8 { background-position: -374px -594px}.sbsprite-campfire_talisman_9 { background-position: -396px -594px}.sbsprite-jaderald { background-position: -418px -594px}.sbsprite-campfire_talisman_6 { background-position: -440px -594px}.sbsprite-gold_thorn_head { background-position: -462px -594px}.sbsprite-campfire_talisman_7 { background-position: -484px -594px}.sbsprite-dark_bait { background-position: -506px -594px}.sbsprite-game_annihilator { background-position: -528px -594px}.sbsprite-purple_greater_backpack { background-position: -550px -594px}.sbsprite-bestiary_deep_caverns { background-position: -572px -594px}.sbsprite-foraging_5_portal { background-position: -594px -594px}.sbsprite-wolf_talisman { background-position: -616px -594px}.sbsprite-gold_professor_head { background-position: -638px -594px}.sbsprite-pet_skin_sheep_light_blue { background-position: -660px -594px}.sbsprite-ice_lolly_4 { background-position: -682px -594px}.sbsprite-basketball_10 { background-position: -704px -594px}.sbsprite-ice_lolly_3 { background-position: -726px -594px}.sbsprite-mineral_helmet { background-position: -748px -594px}.sbsprite-basketball_11 { background-position: -770px -594px}.sbsprite-ice_lolly_2 { background-position: -792px -594px}.sbsprite-basketball_12 { background-position: -814px -594px}.sbsprite-ice_lolly_1 { background-position: -836px -594px}.sbsprite-rock_candy { background-position: -858px -594px}.sbsprite-ice_lolly_8 { background-position: -880px -594px}.sbsprite-tarantula_generator_2 { background-position: -902px -594px}.sbsprite-ice_lolly_7 { background-position: -924px -594px}.sbsprite-tarantula_generator_1 { background-position: -946px -594px}.sbsprite-ice_lolly_6 { background-position: -968px -594px}.sbsprite-ice_lolly_5 { background-position: -990px -594px}.sbsprite-purple_egg { background-position: -1012px -594px}.sbsprite-ice_lolly_9 { background-position: -1034px -594px}.sbsprite-tarantula_generator_9 { background-position: 0 -616px}.sbsprite-tarantula_generator_8 { background-position: -22px -616px}.sbsprite-tarantula_generator_7 { background-position: -44px -616px}.sbsprite-tarantula_generator_6 { background-position: -66px -616px}.sbsprite-tarantula_generator_5 { background-position: -88px -616px}.sbsprite-tarantula_generator_4 { background-position: -110px -616px}.sbsprite-tarantula_generator_3 { background-position: -132px -616px}.sbsprite-hypixel_castle { background-position: -154px -616px}.sbsprite-rune_golden { background-position: -176px -616px}.sbsprite-wheat_generator_9 { background-position: -198px -616px}.sbsprite-ftx_3070 { background-position: -220px -616px}.sbsprite-wheat_generator_8 { background-position: -242px -616px}.sbsprite-wheat_generator_5 { background-position: -264px -616px}.sbsprite-wheat_generator_4 { background-position: -286px -616px}.sbsprite-builder_corn { background-position: -308px -616px}.sbsprite-cheap_coffee { background-position: -330px -616px}.sbsprite-wheat_generator_7 { background-position: -352px -616px}.sbsprite-wheat_generator_6 { background-position: -374px -616px}.sbsprite-mushroom_generator_11 { background-position: -396px -616px}.sbsprite-wheat_generator_1 { background-position: -418px -616px}.sbsprite-mushroom_generator_10 { background-position: -440px -616px}.sbsprite-ender_plus { background-position: -462px -616px}.sbsprite-wheat_generator_3 { background-position: -484px -616px}.sbsprite-wheat_generator_2 { background-position: -506px -616px}.sbsprite-voidling_generator_10 { background-position: -528px -616px}.sbsprite-voidling_generator_11 { background-position: -550px -616px}.sbsprite-mushroom_generator_12 { background-position: -572px -616px}.sbsprite-personal_bonus { background-position: -594px -616px}.sbsprite-flawless_amber_gem { background-position: -616px -616px}.sbsprite-rune_darkness_within { background-position: -638px -616px}.sbsprite-bag_of_cash { background-position: -660px -616px}.sbsprite-pet_skin_hound_beagle { background-position: -682px -616px}.sbsprite-pufferfish_hat { background-position: -704px -616px}.sbsprite-lime_greater_backpack { background-position: -726px -616px}.sbsprite-food_trough { background-position: -748px -616px}.sbsprite-pet_skin_yeti_grown_up { background-position: -770px -616px}.sbsprite-slime_generator_10 { background-position: -792px -616px}.sbsprite-undead_personality { background-position: -814px -616px}.sbsprite-slime_generator_11 { background-position: -836px -616px}.sbsprite-nether_wart_island { background-position: -858px -616px}.sbsprite-gravel_generator_5 { background-position: -880px -616px}.sbsprite-gravel_generator_4 { background-position: -902px -616px}.sbsprite-gravel_generator_7 { background-position: -924px -616px}.sbsprite-gravel_generator_6 { background-position: -946px -616px}.sbsprite-gravel_generator_9 { background-position: -968px -616px}.sbsprite-gravel_generator_8 { background-position: -990px -616px}.sbsprite-shiny_shard { background-position: -1012px -616px}.sbsprite-pet_skin_rabbit_rose { background-position: -1034px -616px}.sbsprite-quiver { background-position: 0 -638px}.sbsprite-rune_snake { background-position: -22px -638px}.sbsprite-bonzo_mask { background-position: -44px -638px}.sbsprite-fast_travel { background-position: -66px -638px}.sbsprite-treasurite { background-position: -88px -638px}.sbsprite-chicken_coop { background-position: -110px -638px}.sbsprite-end_portal_fumes_mixin { background-position: -132px -638px}.sbsprite-crafting_plus { background-position: -154px -638px}.sbsprite-gravel_generator_1 { background-position: -176px -638px}.sbsprite-gravel_generator_3 { background-position: -198px -638px}.sbsprite-gravel_generator_2 { background-position: -220px -638px}.sbsprite-easter_egg_11 { background-position: -242px -638px}.sbsprite-easter_egg_10 { background-position: -264px -638px}.sbsprite-protein_bar { background-position: -286px -638px}.sbsprite-hard_stone_generator_10 { background-position: -308px -638px}.sbsprite-coin_gold { background-position: -330px -638px}.sbsprite-light_blue_jumbo_backpack { background-position: -352px -638px}.sbsprite-hard_stone_generator_12 { background-position: -374px -638px}.sbsprite-hard_stone_generator_11 { background-position: -396px -638px}.sbsprite-rune_blood { background-position: -418px -638px}.sbsprite-raggedy_shark_tooth_necklace { background-position: -440px -638px}.sbsprite-pure_mithril { background-position: -462px -638px}.sbsprite-coin_emerald { background-position: -484px -638px}.sbsprite-pet_skin_black_cat_onyx { background-position: -506px -638px}.sbsprite-easter_egg_12 { background-position: -528px -638px}.sbsprite-emperor_head { background-position: -550px -638px}.sbsprite-power_wither_helmet { background-position: -572px -638px}.sbsprite-bee_11 { background-position: -594px -638px}.sbsprite-bee_10 { background-position: -616px -638px}.sbsprite-pet_skin_wolf { background-position: -638px -638px}.sbsprite-pumpkin_4 { background-position: -660px -638px}.sbsprite-pumpkin_3 { background-position: -682px -638px}.sbsprite-pumpkin_6 { background-position: -704px -638px}.sbsprite-fine_ruby_gem { background-position: -726px -638px}.sbsprite-pumpkin_5 { background-position: -748px -638px}.sbsprite-pumpkin_2 { background-position: -770px -638px}.sbsprite-electron_transmitter { background-position: -792px -638px}.sbsprite-pumpkin_1 { background-position: -814px -638px}.sbsprite-gingerbread_house { background-position: -836px -638px}.sbsprite-bee_1 { background-position: -858px -638px}.sbsprite-large_mining_sack { background-position: -880px -638px}.sbsprite-bee_2 { background-position: -902px -638px}.sbsprite-bee_3 { background-position: -924px -638px}.sbsprite-bee_4 { background-position: -946px -638px}.sbsprite-midas_jewel { background-position: -968px -638px}.sbsprite-unstable_dragon_helmet { background-position: -990px -638px}.sbsprite-vaccine_talisman { background-position: -1012px -638px}.sbsprite-whale_bait { background-position: -1034px -638px}.sbsprite-bee_9 { background-position: 0 -660px}.sbsprite-bee_5 { background-position: -22px -660px}.sbsprite-booster_cookie_box { background-position: -44px -660px}.sbsprite-perfect_topaz_gem { background-position: -66px -660px}.sbsprite-bee_6 { background-position: -88px -660px}.sbsprite-bee_7 { background-position: -110px -660px}.sbsprite-bee_8 { background-position: -132px -660px}.sbsprite-elvish_helmet { background-position: -154px -660px}.sbsprite-pumpkin_8 { background-position: -176px -660px}.sbsprite-light_grey_greater_backpack { background-position: -198px -660px}.sbsprite-pumpkin_7 { background-position: -220px -660px}.sbsprite-pumpkin_9 { background-position: -242px -660px}.sbsprite-best_weapon_rack { background-position: -264px -660px}.sbsprite-washed_up_souvenir { background-position: -286px -660px}.sbsprite-coin_diamond { background-position: -308px -660px}.sbsprite-builder_pink_berry { background-position: -330px -660px}.sbsprite-clownfish_personality { background-position: -352px -660px}.sbsprite-easter_egg_personality { background-position: -374px -660px}.sbsprite-jerry_talisman_green { background-position: -396px -660px}.sbsprite-spiked_atrocity { background-position: -418px -660px}.sbsprite-flower_generator_8 { background-position: -440px -660px}.sbsprite-flower_generator_9 { background-position: -462px -660px}.sbsprite-farmer_orb { background-position: -484px -660px}.sbsprite-flower_generator_4 { background-position: -506px -660px}.sbsprite-crypt_skull_key { background-position: -528px -660px}.sbsprite-flower_generator_5 { background-position: -550px -660px}.sbsprite-flower_generator_6 { background-position: -572px -660px}.sbsprite-flower_generator_7 { background-position: -594px -660px}.sbsprite-flower_generator_1 { background-position: -616px -660px}.sbsprite-flower_generator_2 { background-position: -638px -660px}.sbsprite-nutcracker { background-position: -660px -660px}.sbsprite-flower_generator_3 { background-position: -682px -660px}.sbsprite-scarf_studies { background-position: -704px -660px}.sbsprite-builder_apple { background-position: -726px -660px}.sbsprite-skyblock_table { background-position: -748px -660px}.sbsprite-sleeping_eye { background-position: -770px -660px}.sbsprite-spider_generator_1 { background-position: -792px -660px}.sbsprite-pet_skin_elephant_blue { background-position: -814px -660px}.sbsprite-spider_generator_2 { background-position: -836px -660px}.sbsprite-spider_generator_3 { background-position: -858px -660px}.sbsprite-shark_bait { background-position: -880px -660px}.sbsprite-spider_generator_4 { background-position: -902px -660px}.sbsprite-spider_generator_5 { background-position: -924px -660px}.sbsprite-black { background-position: -946px -660px}.sbsprite-sapphire_polished_drill_engine { background-position: -968px -660px}.sbsprite-cocoa_generator_1 { background-position: -990px -660px}.sbsprite-cocoa_generator_7 { background-position: -1012px -660px}.sbsprite-cocoa_generator_6 { background-position: -1034px -660px}.sbsprite-rune_snow { background-position: 0 -682px}.sbsprite-cocoa_generator_9 { background-position: -22px -682px}.sbsprite-cocoa_generator_8 { background-position: -44px -682px}.sbsprite-cocoa_generator_3 { background-position: -66px -682px}.sbsprite-cocoa_generator_2 { background-position: -88px -682px}.sbsprite-cocoa_generator_5 { background-position: -110px -682px}.sbsprite-cocoa_generator_4 { background-position: -132px -682px}.sbsprite-spider_generator_6 { background-position: -154px -682px}.sbsprite-spider_generator_7 { background-position: -176px -682px}.sbsprite-spider_generator_8 { background-position: -198px -682px}.sbsprite-spider_generator_9 { background-position: -220px -682px}.sbsprite-brown_large_backpack { background-position: -242px -682px}.sbsprite-flower_maelstrom { background-position: -264px -682px}.sbsprite-pumpkin_generator_12 { background-position: -286px -682px}.sbsprite-coal_generator_9 { background-position: -308px -682px}.sbsprite-diamond_thorn_head { background-position: -330px -682px}.sbsprite-ender_stone_generator_11 { background-position: -352px -682px}.sbsprite-coal_generator_8 { background-position: -374px -682px}.sbsprite-ender_stone_generator_10 { background-position: -396px -682px}.sbsprite-coal_generator_7 { background-position: -418px -682px}.sbsprite-jerry_box_blue { background-position: -440px -682px}.sbsprite-coal_generator_6 { background-position: -462px -682px}.sbsprite-coal_generator_5 { background-position: -484px -682px}.sbsprite-pumpkin_generator_11 { background-position: -506px -682px}.sbsprite-coal_generator_4 { background-position: -528px -682px}.sbsprite-pumpkin_generator_10 { background-position: -550px -682px}.sbsprite-talisman_of_space { background-position: -572px -682px}.sbsprite-talisman_enrichment_strength { background-position: -594px -682px}.sbsprite-white_jumbo_backpack { background-position: -616px -682px}.sbsprite-full_fairy_control { background-position: -638px -682px}.sbsprite-quartz_generator_9 { background-position: -660px -682px}.sbsprite-rune_wake { background-position: -682px -682px}.sbsprite-quartz_generator_8 { background-position: -704px -682px}.sbsprite-festive_jerry_personality { background-position: -726px -682px}.sbsprite-quartz_generator_5 { background-position: -748px -682px}.sbsprite-builder_berry { background-position: -770px -682px}.sbsprite-quartz_generator_4 { background-position: -792px -682px}.sbsprite-quartz_generator_7 { background-position: -814px -682px}.sbsprite-quartz_generator_6 { background-position: -836px -682px}.sbsprite-quartz_generator_1 { background-position: -858px -682px}.sbsprite-quartz_generator_3 { background-position: -880px -682px}.sbsprite-quartz_generator_2 { background-position: -902px -682px}.sbsprite-bingo_heirloom { background-position: -924px -682px}.sbsprite-dwarf_turtle_shelmet { background-position: -946px -682px}.sbsprite-wolf_paw { background-position: -968px -682px}.sbsprite-jasper_crystal { background-position: -990px -682px}.sbsprite-party_hat_crab { background-position: -1012px -682px}.sbsprite-feather_artifact { background-position: -1034px -682px}.sbsprite-coal_generator_3 { background-position: 0 -704px}.sbsprite-coal_generator_2 { background-position: -22px -704px}.sbsprite-coal_generator_1 { background-position: -44px -704px}.sbsprite-fast_travel_gold { background-position: -66px -704px}.sbsprite-crystal_hollows_crystals { background-position: -88px -704px}.sbsprite-mining_island { background-position: -110px -704px}.sbsprite-flawless_jasper_gem { background-position: -132px -704px}.sbsprite-halloween_candles { background-position: -154px -704px}.sbsprite-ascension_rope { background-position: -176px -704px}.sbsprite-brown_small_backpack { background-position: -198px -704px}.sbsprite-diver_puffer { background-position: -220px -704px}.sbsprite-melon_generator_10 { background-position: -242px -704px}.sbsprite-melon_generator_12 { background-position: -264px -704px}.sbsprite-melon_generator_11 { background-position: -286px -704px}.sbsprite-desert_island { background-position: -308px -704px}.sbsprite-green { background-position: -330px -704px}.sbsprite-crystallized_heart { background-position: -352px -704px}.sbsprite-sinful_dice { background-position: -374px -704px}.sbsprite-soulflow_supercell { background-position: -396px -704px}.sbsprite-sea_creature_artifact { background-position: -418px -704px}.sbsprite-grey_small_backpack { background-position: -440px -704px}.sbsprite-aatrox_batphone { background-position: -462px -704px}.sbsprite-clay_generator_10 { background-position: -484px -704px}.sbsprite-clay_generator_11 { background-position: -506px -704px}.sbsprite-end_stone_personality { background-position: -528px -704px}.sbsprite-builder_banana_bunch { background-position: -550px -704px}.sbsprite-danger_2_portal { background-position: -572px -704px}.sbsprite-mayor_scorpius { background-position: -594px -704px}.sbsprite-voodoo { background-position: -616px -704px}.sbsprite-jerry_box_purple { background-position: -638px -704px}.sbsprite-wither_artifact { background-position: -660px -704px}.sbsprite-skull_chest { background-position: -682px -704px}.sbsprite-pet_skin_elephant_pink { background-position: -704px -704px}.sbsprite-oak_generator_10 { background-position: -726px -704px}.sbsprite-slime_generator_1 { background-position: -748px -704px}.sbsprite-slime_generator_2 { background-position: -770px -704px}.sbsprite-frozen_blaze_icicle { background-position: -792px -704px}.sbsprite-oak_generator_11 { background-position: -814px -704px}.sbsprite-slime_generator_5 { background-position: -836px -704px}.sbsprite-slime_generator_6 { background-position: -858px -704px}.sbsprite-slime_generator_3 { background-position: -880px -704px}.sbsprite-slime_generator_4 { background-position: -902px -704px}.sbsprite-slime_generator_9 { background-position: -924px -704px}.sbsprite-slime_generator_7 { background-position: -946px -704px}.sbsprite-slime_generator_8 { background-position: -968px -704px}.sbsprite-dungeon_golden_key { background-position: -990px -704px}.sbsprite-mender_fedora { background-position: -1012px -704px}.sbsprite-pet_skin_rock_smile { background-position: -1034px -704px}.sbsprite-builder_orange { background-position: 0 -726px}.sbsprite-ghast_generator_10 { background-position: -22px -726px}.sbsprite-beach_chair { background-position: -44px -726px}.sbsprite-ghast_generator_11 { background-position: -66px -726px}.sbsprite-boss { background-position: -88px -726px}.sbsprite-race_precursor_ruins { background-position: -110px -726px}.sbsprite-perfectly_cut_fuel_tank { background-position: -132px -726px}.sbsprite-ice_essence { background-position: -154px -726px}.sbsprite-jerry_box_green { background-position: -176px -726px}.sbsprite-fireplace { background-position: -198px -726px}.sbsprite-moldy_bread { background-position: -220px -726px}.sbsprite-pet_skin_tiger_saber_tooth { background-position: -242px -726px}.sbsprite-obsidian_generator_5 { background-position: -264px -726px}.sbsprite-obsidian_generator_4 { background-position: -286px -726px}.sbsprite-obsidian_generator_7 { background-position: -308px -726px}.sbsprite-obsidian_generator_6 { background-position: -330px -726px}.sbsprite-obsidian_generator_1 { background-position: -352px -726px}.sbsprite-obsidian_generator_3 { background-position: -374px -726px}.sbsprite-foraging_1_portal { background-position: -396px -726px}.sbsprite-obsidian_generator_2 { background-position: -418px -726px}.sbsprite-dungeon_stone_tank { background-position: -440px -726px}.sbsprite-obsidian_generator_9 { background-position: -462px -726px}.sbsprite-obsidian_generator_8 { background-position: -484px -726px}.sbsprite-pet_skin_sheep_light_green { background-position: -506px -726px}.sbsprite-decayed_bat { background-position: -528px -726px}.sbsprite-pet_skin_squid_glow { background-position: -550px -726px}.sbsprite-potato_generator_4 { background-position: -572px -726px}.sbsprite-potato_generator_5 { background-position: -594px -726px}.sbsprite-potato_generator_12 { background-position: -616px -726px}.sbsprite-potato_generator_6 { background-position: -638px -726px}.sbsprite-potato_generator_11 { background-position: -660px -726px}.sbsprite-potato_generator_7 { background-position: -682px -726px}.sbsprite-potato_generator_10 { background-position: -704px -726px}.sbsprite-potato_generator_8 { background-position: -726px -726px}.sbsprite-potato_generator_9 { background-position: -748px -726px}.sbsprite-slayer_energy_drink { background-position: -770px -726px}.sbsprite-arachne_keeper_fragment { background-position: -792px -726px}.sbsprite-cat_talisman { background-position: -814px -726px}.sbsprite-large_slayer_sack { background-position: -836px -726px}.sbsprite-rune_rainbow { background-position: -858px -726px}.sbsprite-potato_generator_1 { background-position: -880px -726px}.sbsprite-potato_generator_2 { background-position: -902px -726px}.sbsprite-potato_generator_3 { background-position: -924px -726px}.sbsprite-lime_large_backpack { background-position: -946px -726px}.sbsprite-bestiary_spiders_den { background-position: -968px -726px}.sbsprite-ruby_polished_drill_engine { background-position: -990px -726px}.sbsprite-yellow_jumbo_backpack { background-position: -1012px -726px}.sbsprite-pet_skin_dolphin_snubnose { background-position: -1034px -726px}.sbsprite-spider_egg_mixin { background-position: 0 -748px}.sbsprite-pet_skin_dragon_pastel { background-position: -22px -748px}.sbsprite-honed_shark_tooth_necklace { background-position: -44px -748px}.sbsprite-bob_omb { background-position: -66px -748px}.sbsprite-dungeon_wizard_crystal { background-position: -88px -748px}.sbsprite-barn_island { background-position: -110px -748px}.sbsprite-weapon_rack { background-position: -132px -748px}.sbsprite-shadow_assassin_crimson { background-position: -154px -748px}.sbsprite-small_talisman_bag { background-position: -176px -748px}.sbsprite-medium_combat_sack { background-position: -198px -748px}.sbsprite-bonzo_statue { background-position: -220px -748px}.sbsprite-zombie_artifact { background-position: -242px -748px}.sbsprite-cheese_hunter { background-position: -264px -748px}.sbsprite-hologram { background-position: -286px -748px}.sbsprite-ultrasequencer { background-position: -308px -748px}.sbsprite-wise_dragon_helmet { background-position: -330px -748px}.sbsprite-cyan_medium_backpack { background-position: -352px -748px}.sbsprite-light_grey_small_backpack { background-position: -374px -748px}.sbsprite-catacombs_pass_5 { background-position: -396px -748px}.sbsprite-catacombs_pass_4 { background-position: -418px -748px}.sbsprite-catacombs_pass_3 { background-position: -440px -748px}.sbsprite-magma_bucket_upgrade { background-position: -462px -748px}.sbsprite-catacombs_pass_2 { background-position: -484px -748px}.sbsprite-coin_redstone { background-position: -506px -748px}.sbsprite-catacombs_pass_1 { background-position: -528px -748px}.sbsprite-hermit_crab_10 { background-position: -550px -748px}.sbsprite-catacombs_pass_0 { background-position: -572px -748px}.sbsprite-hermit_crab_11 { background-position: -594px -748px}.sbsprite-dungeon_stone_mage { background-position: -616px -748px}.sbsprite-gingerbread_personality { background-position: -638px -748px}.sbsprite-titanium_drill_engine { background-position: -660px -748px}.sbsprite-catacombs_pass_9 { background-position: -682px -748px}.sbsprite-fast_travel_dragontail { background-position: -704px -748px}.sbsprite-catacombs_pass_8 { background-position: -726px -748px}.sbsprite-catacombs_pass_7 { background-position: -748px -748px}.sbsprite-reaper_spirit { background-position: -770px -748px}.sbsprite-catacombs_pass_6 { background-position: -792px -748px}.sbsprite-armor_of_the_resistance_helmet { background-position: -814px -748px}.sbsprite-orange_small_backpack { background-position: -836px -748px}.sbsprite-bait_ring { background-position: -858px -748px}.sbsprite-luck_talisman { background-position: -880px -748px}.sbsprite-beach_ball_11 { background-position: -902px -748px}.sbsprite-beach_ball_10 { background-position: -924px -748px}.sbsprite-shark_personality { background-position: -946px -748px}.sbsprite-coal_generator_11 { background-position: -968px -748px}.sbsprite-coal_generator_12 { background-position: -990px -748px}.sbsprite-fourth_master_star { background-position: -1012px -748px}.sbsprite-water_hydra_head { background-position: -1034px -748px}.sbsprite-coal_generator_10 { background-position: 0 -770px}.sbsprite-ice_dinner_table { background-position: -22px -770px}.sbsprite-talisman_enrichment_attack_speed { background-position: -44px -770px}.sbsprite-gemstone_fuel_tank { background-position: -66px -770px}.sbsprite-green_large_backpack { background-position: -88px -770px}.sbsprite-fairy_wings_charm { background-position: -110px -770px}.sbsprite-rare_diamond { background-position: -132px -770px}.sbsprite-bunny { background-position: -154px -770px}.sbsprite-storm_the_fish { background-position: -176px -770px}.sbsprite-penguin_personality { background-position: -198px -770px}.sbsprite-shark_1 { background-position: -220px -770px}.sbsprite-shard_of_the_shredded { background-position: -242px -770px}.sbsprite-shark_2 { background-position: -264px -770px}.sbsprite-sheep_generator_11 { background-position: -286px -770px}.sbsprite-diamonite { background-position: -308px -770px}.sbsprite-prehistoric_egg { background-position: -330px -770px}.sbsprite-shark_3 { background-position: -352px -770px}.sbsprite-sheep_generator_12 { background-position: -374px -770px}.sbsprite-shark_4 { background-position: -396px -770px}.sbsprite-shark_5 { background-position: -418px -770px}.sbsprite-shark_6 { background-position: -440px -770px}.sbsprite-shark_7 { background-position: -462px -770px}.sbsprite-shark_8 { background-position: -484px -770px}.sbsprite-shark_9 { background-position: -506px -770px}.sbsprite-bbq { background-position: -528px -770px}.sbsprite-pet_skin_sheep_white { background-position: -550px -770px}.sbsprite-sheep_generator_10 { background-position: -572px -770px}.sbsprite-rune_spirit { background-position: -594px -770px}.sbsprite-aote_stone { background-position: -616px -770px}.sbsprite-french_bread { background-position: -638px -770px}.sbsprite-ember_helmet { background-position: -660px -770px}.sbsprite-large_bed { background-position: -682px -770px}.sbsprite-builder_bush { background-position: -704px -770px}.sbsprite-talisman_enrichment_ferocity { background-position: -726px -770px}.sbsprite-fire_talisman { background-position: -748px -770px}.sbsprite-purple_candy { background-position: -770px -770px}.sbsprite-spider_talisman { background-position: -792px -770px}.sbsprite-intimidation_artifact { background-position: -814px -770px}.sbsprite-large_candy_sack { background-position: -836px -770px}.sbsprite-present_10 { background-position: -858px -770px}.sbsprite-present_11 { background-position: -880px -770px}.sbsprite-beach_ball_9 { background-position: -902px -770px}.sbsprite-tarantula_generator_10 { background-position: -924px -770px}.sbsprite-beach_ball_8 { background-position: -946px -770px}.sbsprite-gold_sadan_head { background-position: -968px -770px}.sbsprite-tarantula_generator_11 { background-position: -990px -770px}.sbsprite-large_enchanted_foraging_sack { background-position: -1012px -770px}.sbsprite-warrior_dungeon_ability_1 { background-position: -1034px -770px}.sbsprite-beach_ball_5 { background-position: 0 -792px}.sbsprite-beach_ball_4 { background-position: -22px -792px}.sbsprite-beach_ball_7 { background-position: -44px -792px}.sbsprite-cracked_piggy_bank { background-position: -66px -792px}.sbsprite-beach_ball_6 { background-position: -88px -792px}.sbsprite-ice_lolly_11 { background-position: -110px -792px}.sbsprite-ice_lolly_10 { background-position: -132px -792px}.sbsprite-razor_sharp_shark_tooth_necklace { background-position: -154px -792px}.sbsprite-farm_crystal { background-position: -176px -792px}.sbsprite-bank_upgrade_luxurious { background-position: -198px -792px}.sbsprite-large_fishing_sack { background-position: -220px -792px}.sbsprite-lime_small_backpack { background-position: -242px -792px}.sbsprite-portable_wool_weaver { background-position: -264px -792px}.sbsprite-beach_ball_1 { background-position: -286px -792px}.sbsprite-beach_ball_3 { background-position: -308px -792px}.sbsprite-beach_ball_2 { background-position: -330px -792px}.sbsprite-revive_stone_orb { background-position: -352px -792px}.sbsprite-fish_hat { background-position: -374px -792px}.sbsprite-skull_personality { background-position: -396px -792px}.sbsprite-builder_onion { background-position: -418px -792px}.sbsprite-melon_generator_3 { background-position: -440px -792px}.sbsprite-zombie_generator_9 { background-position: -462px -792px}.sbsprite-melon_generator_2 { background-position: -484px -792px}.sbsprite-melon_generator_1 { background-position: -506px -792px}.sbsprite-melon_generator_7 { background-position: -528px -792px}.sbsprite-zombie_generator_5 { background-position: -550px -792px}.sbsprite-melon_generator_6 { background-position: -572px -792px}.sbsprite-zombie_generator_6 { background-position: -594px -792px}.sbsprite-melon_generator_5 { background-position: -616px -792px}.sbsprite-zombie_generator_7 { background-position: -638px -792px}.sbsprite-melon_generator_4 { background-position: -660px -792px}.sbsprite-zombie_generator_8 { background-position: -682px -792px}.sbsprite-zombie_generator_1 { background-position: -704px -792px}.sbsprite-zombie_generator_2 { background-position: -726px -792px}.sbsprite-optical_lens { background-position: -748px -792px}.sbsprite-zombie_generator_3 { background-position: -770px -792px}.sbsprite-zombie_generator_4 { background-position: -792px -792px}.sbsprite-beach_umbrella { background-position: -814px -792px}.sbsprite-diamond_atom { background-position: -836px -792px}.sbsprite-coin_talisman { background-position: -858px -792px}.sbsprite-nether_island { background-position: -880px -792px}.sbsprite-rune_couture { background-position: -902px -792px}.sbsprite-fish_affinity_talisman { background-position: -924px -792px}.sbsprite-wedding_ring_4 { background-position: -946px -792px}.sbsprite-wedding_ring_5 { background-position: -968px -792px}.sbsprite-wedding_ring_6 { background-position: -990px -792px}.sbsprite-wedding_ring_7 { background-position: -1012px -792px}.sbsprite-wedding_ring_8 { background-position: -1034px -792px}.sbsprite-large_enchanted_combat_sack { background-position: 0 -814px}.sbsprite-wedding_ring_9 { background-position: -22px -814px}.sbsprite-rune_clouds { background-position: -44px -814px}.sbsprite-perfect_amber_gem { background-position: -66px -814px}.sbsprite-precursor_gear { background-position: -88px -814px}.sbsprite-wedding_ring_2 { background-position: -110px -814px}.sbsprite-wedding_ring_3 { background-position: -132px -814px}.sbsprite-rune_enchant { background-position: -154px -814px}.sbsprite-god_potion { background-position: -176px -814px}.sbsprite-rune_magical { background-position: -198px -814px}.sbsprite-pet_skin_monkey_golden { background-position: -220px -814px}.sbsprite-spiked_bait { background-position: -242px -814px}.sbsprite-ghost_11 { background-position: -264px -814px}.sbsprite-perfect_jasper_gem { background-position: -286px -814px}.sbsprite-quartz_generator_11 { background-position: -308px -814px}.sbsprite-sandcastle_1 { background-position: -330px -814px}.sbsprite-sandcastle_2 { background-position: -352px -814px}.sbsprite-pet_skin_sheep_pink { background-position: -374px -814px}.sbsprite-premium_flesh { background-position: -396px -814px}.sbsprite-sandcastle_5 { background-position: -418px -814px}.sbsprite-blessed_bait { background-position: -440px -814px}.sbsprite-sandcastle_6 { background-position: -462px -814px}.sbsprite-sandcastle_3 { background-position: -484px -814px}.sbsprite-sandcastle_4 { background-position: -506px -814px}.sbsprite-wise_wither_helmet { background-position: -528px -814px}.sbsprite-sandcastle_9 { background-position: -550px -814px}.sbsprite-quartz_generator_10 { background-position: -572px -814px}.sbsprite-sandcastle_7 { background-position: -594px -814px}.sbsprite-sandcastle_8 { background-position: -616px -814px}.sbsprite-mayor_cole { background-position: -638px -814px}.sbsprite-fifth_master_star { background-position: -660px -814px}.sbsprite-ghost_10 { background-position: -682px -814px}.sbsprite-young_shimmer { background-position: -704px -814px}.sbsprite-minion_chair { background-position: -726px -814px}.sbsprite-pig_mask { background-position: -748px -814px}.sbsprite-hyper_catalyst_upgrade { background-position: -770px -814px}.sbsprite-potion { background-position: -792px -814px}.sbsprite-exceedingly_rare_ender_artifact_upgrader { background-position: -814px -814px}.sbsprite-refined_titanium { background-position: -836px -814px}.sbsprite-sharp_shark_tooth_necklace { background-position: -858px -814px}.sbsprite-wreath { background-position: -880px -814px}.sbsprite-melon_generator_9 { background-position: -902px -814px}.sbsprite-melon_generator_8 { background-position: -924px -814px}.sbsprite-epoch_cake_pink { background-position: -946px -814px}.sbsprite-dungeon_stone_healer { background-position: -968px -814px}.sbsprite-young_baby { background-position: -990px -814px}.sbsprite-presents { background-position: -1012px -814px}.sbsprite-dark_oak_generator_5 { background-position: -1034px -814px}.sbsprite-dark_oak_generator_6 { background-position: 0 -836px}.sbsprite-large_enchanted_fishing_sack { background-position: -22px -836px}.sbsprite-radiant_power_orb { background-position: -44px -836px}.sbsprite-dark_oak_generator_3 { background-position: -66px -836px}.sbsprite-large_husbandry_sack { background-position: -88px -836px}.sbsprite-dark_oak_generator_4 { background-position: -110px -836px}.sbsprite-dark_oak_generator_9 { background-position: -132px -836px}.sbsprite-dark_oak_generator_7 { background-position: -154px -836px}.sbsprite-dark_oak_generator_8 { background-position: -176px -836px}.sbsprite-dark_oak_generator_1 { background-position: -198px -836px}.sbsprite-dark_oak_generator_2 { background-position: -220px -836px}.sbsprite-illusion_glass { background-position: -242px -836px}.sbsprite-iron_chest { background-position: -264px -836px}.sbsprite-festive_zombie_personality { background-position: -286px -836px}.sbsprite-frozen_blaze_helmet { background-position: -308px -836px}.sbsprite-fast_travel_nest { background-position: -330px -836px}.sbsprite-brown_greater_backpack { background-position: -352px -836px}.sbsprite-red_gift { background-position: -374px -836px}.sbsprite-builder_lemon { background-position: -396px -836px}.sbsprite-rune_hot { background-position: -418px -836px}.sbsprite-small_mining_sack { background-position: -440px -836px}.sbsprite-pet_skin_jerry_green_elf { background-position: -462px -836px}.sbsprite-amber_polished_drill_engine { background-position: -484px -836px}.sbsprite-pedestal { background-position: -506px -836px}.sbsprite-red_claw_artifact { background-position: -528px -836px}.sbsprite-zombie_generator_11 { background-position: -550px -836px}.sbsprite-zombie_generator_10 { background-position: -572px -836px}.sbsprite-wither_relic { background-position: -594px -836px}.sbsprite-spider_hat { background-position: -616px -836px}.sbsprite-sludge_juice { background-position: -638px -836px}.sbsprite-precursor_eye { background-position: -660px -836px}.sbsprite-fast_travel_scarleton { background-position: -682px -836px}.sbsprite-connect_four { background-position: -704px -836px}.sbsprite-sloth_3 { background-position: -726px -836px}.sbsprite-sloth_4 { background-position: -748px -836px}.sbsprite-pet_skin_enderman { background-position: -770px -836px}.sbsprite-sloth_1 { background-position: -792px -836px}.sbsprite-sloth_2 { background-position: -814px -836px}.sbsprite-rabbit_generator_9 { background-position: -836px -836px}.sbsprite-builder_chesto_berry { background-position: -858px -836px}.sbsprite-rabbit_generator_4 { background-position: -880px -836px}.sbsprite-sloth_7 { background-position: -902px -836px}.sbsprite-rabbit_generator_3 { background-position: -924px -836px}.sbsprite-sloth_8 { background-position: -946px -836px}.sbsprite-rabbit_generator_2 { background-position: -968px -836px}.sbsprite-sloth_5 { background-position: -990px -836px}.sbsprite-rabbit_generator_1 { background-position: -1012px -836px}.sbsprite-sloth_6 { background-position: -1034px -836px}.sbsprite-rabbit_generator_8 { background-position: 0 -858px}.sbsprite-lantern { background-position: -22px -858px}.sbsprite-rabbit_generator_7 { background-position: -44px -858px}.sbsprite-rabbit_generator_6 { background-position: -66px -858px}.sbsprite-sloth_9 { background-position: -88px -858px}.sbsprite-rabbit_generator_5 { background-position: -110px -858px}.sbsprite-clownfish_8 { background-position: -132px -858px}.sbsprite-clownfish_9 { background-position: -154px -858px}.sbsprite-clownfish_6 { background-position: -176px -858px}.sbsprite-clownfish_7 { background-position: -198px -858px}.sbsprite-clownfish_4 { background-position: -220px -858px}.sbsprite-clownfish_5 { background-position: -242px -858px}.sbsprite-mender_helmet { background-position: -264px -858px}.sbsprite-clownfish_2 { background-position: -286px -858px}.sbsprite-clownfish_3 { background-position: -308px -858px}.sbsprite-enderman_hat { background-position: -330px -858px}.sbsprite-superior_dragon_helmet { background-position: -352px -858px}.sbsprite-clownfish_1 { background-position: -374px -858px}.sbsprite-reset_heart_of_the_mountain { background-position: -396px -858px}.sbsprite-lapis_crystal { background-position: -418px -858px}.sbsprite-purple_jumbo_backpack { background-position: -440px -858px}.sbsprite-purple_large_backpack { background-position: -462px -858px}.sbsprite-dragon_claw { background-position: -484px -858px}.sbsprite-potato_talisman { background-position: -506px -858px}.sbsprite-nether_warts_generator_12 { background-position: -528px -858px}.sbsprite-nether_warts_generator_11 { background-position: -550px -858px}.sbsprite-nether_warts_generator_10 { background-position: -572px -858px}.sbsprite-yellow_medium_backpack { background-position: -594px -858px}.sbsprite-acacia_generator_9 { background-position: -616px -858px}.sbsprite-arachne_crystal { background-position: -638px -858px}.sbsprite-acacia_generator_8 { background-position: -660px -858px}.sbsprite-acacia_generator_7 { background-position: -682px -858px}.sbsprite-helix { background-position: -704px -858px}.sbsprite-acacia_generator_6 { background-position: -726px -858px}.sbsprite-mutant_nether_stalk { background-position: -748px -858px}.sbsprite-acacia_generator_5 { background-position: -770px -858px}.sbsprite-acacia_generator_4 { background-position: -792px -858px}.sbsprite-acacia_generator_3 { background-position: -814px -858px}.sbsprite-acacia_generator_2 { background-position: -836px -858px}.sbsprite-acacia_generator_1 { background-position: -858px -858px}.sbsprite-orange_greater_backpack { background-position: -880px -858px}.sbsprite-boss_collection_professor { background-position: -902px -858px}.sbsprite-soulflow_engine { background-position: -924px -858px}.sbsprite-armor_showcase { background-position: -946px -858px}.sbsprite-gingerbread_2 { background-position: -968px -858px}.sbsprite-gingerbread_1 { background-position: -990px -858px}.sbsprite-gingerbread_6 { background-position: -1012px -858px}.sbsprite-gingerbread_5 { background-position: -1034px -858px}.sbsprite-gingerbread_4 { background-position: 0 -880px}.sbsprite-small_backpack { background-position: -22px -880px}.sbsprite-gingerbread_3 { background-position: -44px -880px}.sbsprite-gingerbread_9 { background-position: -66px -880px}.sbsprite-gingerbread_8 { background-position: -88px -880px}.sbsprite-gingerbread_7 { background-position: -110px -880px}.sbsprite-small_fishing_sack { background-position: -132px -880px}.sbsprite-fast_travel_castle { background-position: -154px -880px}.sbsprite-glacite_jewel { background-position: -176px -880px}.sbsprite-medium_agronomy_sack { background-position: -198px -880px}.sbsprite-mining_fortune { background-position: -220px -880px}.sbsprite-pet_item_spooky_cupcake { background-position: -242px -880px}.sbsprite-red_medium_backpack { background-position: -264px -880px}.sbsprite-third_master_star { background-position: -286px -880px}.sbsprite-pet_skin_phoenix_ice { background-position: -308px -880px}.sbsprite-golem_hat { background-position: -330px -880px}.sbsprite-ghost_personality { background-position: -352px -880px}.sbsprite-epoch_cake_yellow { background-position: -374px -880px}.sbsprite-creeper_generator_11 { background-position: -396px -880px}.sbsprite-creeper_generator_10 { background-position: -418px -880px}.sbsprite-magenta_medium_backpack { background-position: -440px -880px}.sbsprite-pet_skin_elephant_green { background-position: -462px -880px}.sbsprite-soulflow_pile { background-position: -484px -880px}.sbsprite-pumpkin_personality { background-position: -506px -880px}.sbsprite-small_slayer_sack { background-position: -528px -880px}.sbsprite-poisoned_candle { background-position: -550px -880px}.sbsprite-bestiary_crimson_isle { background-position: -572px -880px}.sbsprite-ring_potion_affinity { background-position: -594px -880px}.sbsprite-rock_gemstone { background-position: -616px -880px}.sbsprite-blood_god_crest { background-position: -638px -880px}.sbsprite-judgement_core { background-position: -660px -880px}.sbsprite-rune_tidal { background-position: -682px -880px}.sbsprite-lava_talisman { background-position: -704px -880px}.sbsprite-revived_heart { background-position: -726px -880px}.sbsprite-killer_personality { background-position: -748px -880px}.sbsprite-snow_suit_helmet { background-position: -770px -880px}.sbsprite-blobfish_hat { background-position: -792px -880px}.sbsprite-stool { background-position: -814px -880px}.sbsprite-builder_blue_corn { background-position: -836px -880px}.sbsprite-pulpous_orange_juice { background-position: -858px -880px}.sbsprite-fast_travel_drag { background-position: -880px -880px}.sbsprite-tank_dungeon_ability_2 { background-position: -902px -880px}.sbsprite-tank_dungeon_ability_1 { background-position: -924px -880px}.sbsprite-treasure_talisman { background-position: -946px -880px}.sbsprite-bookcase { background-position: -968px -880px}.sbsprite-skeletor_helmet { background-position: -990px -880px}.sbsprite-unstable_baby { background-position: -1012px -880px}.sbsprite-large_combat_sack { background-position: -1034px -880px}.sbsprite-minos_relic { background-position: 0 -902px}.sbsprite-pet_item_bubblegum { background-position: -22px -902px}.sbsprite-small_xtree { background-position: -44px -902px}.sbsprite-epoch_cake_aqua { background-position: -66px -902px}.sbsprite-wither_blood { background-position: -88px -902px}.sbsprite-egg_hunt { background-position: -110px -902px}.sbsprite-rune_fire_spiral { background-position: -132px -902px}.sbsprite-wither_goggles { background-position: -154px -902px}.sbsprite-egg_stack { background-position: -176px -902px}.sbsprite-mummy_candle { background-position: -198px -902px}.sbsprite-enchanted_book_bundle_big_brain { background-position: -220px -902px}.sbsprite-builder_beetroot { background-position: -242px -902px}.sbsprite-rabbit_generator_11 { background-position: -264px -902px}.sbsprite-rabbit_generator_10 { background-position: -286px -902px}.sbsprite-rabbit_generator_12 { background-position: -308px -902px}.sbsprite-rotten_apple { background-position: -330px -902px}.sbsprite-etherwarp_merger { background-position: -352px -902px}.sbsprite-redstone_generator_11 { background-position: -374px -902px}.sbsprite-redstone_generator_10 { background-position: -396px -902px}.sbsprite-protector_baby { background-position: -418px -902px}.sbsprite-fast_travel_deep { background-position: -440px -902px}.sbsprite-polished_pumpkin { background-position: -462px -902px}.sbsprite-redstone_generator_12 { background-position: -484px -902px}.sbsprite-tic_tac_toe { background-position: -506px -902px}.sbsprite-foraging_2_portal { background-position: -528px -902px}.sbsprite-recombobulator_3000 { background-position: -550px -902px}.sbsprite-sand_generator_7 { background-position: -572px -902px}.sbsprite-sand_generator_8 { background-position: -594px -902px}.sbsprite-sand_generator_9 { background-position: -616px -902px}.sbsprite-scarecrow_personality { background-position: -638px -902px}.sbsprite-pet_skin_sheep_aqua { background-position: -660px -902px}.sbsprite-skull_10 { background-position: -682px -902px}.sbsprite-melon_personality { background-position: -704px -902px}.sbsprite-skull_11 { background-position: -726px -902px}.sbsprite-flawed_amethyst_gem { background-position: -748px -902px}.sbsprite-revive_stone { background-position: -770px -902px}.sbsprite-creeper_generator_9 { background-position: -792px -902px}.sbsprite-creeper_generator_8 { background-position: -814px -902px}.sbsprite-potato_basket { background-position: -836px -902px}.sbsprite-diamond_essence { background-position: -858px -902px}.sbsprite-creeper_generator_7 { background-position: -880px -902px}.sbsprite-creeper_generator_6 { background-position: -902px -902px}.sbsprite-creeper_generator_5 { background-position: -924px -902px}.sbsprite-creeper_generator_4 { background-position: -946px -902px}.sbsprite-creeper_generator_3 { background-position: -968px -902px}.sbsprite-creeper_generator_2 { background-position: -990px -902px}.sbsprite-sand_generator_1 { background-position: -1012px -902px}.sbsprite-creeper_generator_1 { background-position: -1034px -902px}.sbsprite-sand_generator_2 { background-position: 0 -924px}.sbsprite-sand_generator_3 { background-position: -22px -924px}.sbsprite-sand_generator_4 { background-position: -44px -924px}.sbsprite-sand_generator_5 { background-position: -66px -924px}.sbsprite-jerry_box_golden { background-position: -88px -924px}.sbsprite-sand_generator_6 { background-position: -110px -924px}.sbsprite-seal_of_the_family { background-position: -132px -924px}.sbsprite-gemstone_chamber { background-position: -154px -924px}.sbsprite-aqua { background-position: -176px -924px}.sbsprite-ice_hunk { background-position: -198px -924px}.sbsprite-crystal_ball { background-position: -220px -924px}.sbsprite-ice_chair { background-position: -242px -924px}.sbsprite-sandcastle_11 { background-position: -264px -924px}.sbsprite-sandcastle_10 { background-position: -286px -924px}.sbsprite-furnace_plus { background-position: -308px -924px}.sbsprite-pig_generator_12 { background-position: -330px -924px}.sbsprite-pig_generator_11 { background-position: -352px -924px}.sbsprite-pig_generator_10 { background-position: -374px -924px}.sbsprite-nether_artifact { background-position: -396px -924px}.sbsprite-chicken_generator_1 { background-position: -418px -924px}.sbsprite-sniper_helmet { background-position: -440px -924px}.sbsprite-chicken_generator_4 { background-position: -462px -924px}.sbsprite-chicken_generator_5 { background-position: -484px -924px}.sbsprite-heat_core { background-position: -506px -924px}.sbsprite-chicken_generator_2 { background-position: -528px -924px}.sbsprite-wishing_compass { background-position: -550px -924px}.sbsprite-chicken_generator_3 { background-position: -572px -924px}.sbsprite-desk { background-position: -594px -924px}.sbsprite-white_large_backpack { background-position: -616px -924px}.sbsprite-hub_portal { background-position: -638px -924px}.sbsprite-spruce_generator_10 { background-position: -660px -924px}.sbsprite-spruce_generator_11 { background-position: -682px -924px}.sbsprite-chicken_generator_8 { background-position: -704px -924px}.sbsprite-mithril_generator_9 { background-position: -726px -924px}.sbsprite-scarf_thesis { background-position: -748px -924px}.sbsprite-chicken_generator_9 { background-position: -770px -924px}.sbsprite-mithril_generator_8 { background-position: -792px -924px}.sbsprite-fast_travel_da { background-position: -814px -924px}.sbsprite-chicken_generator_6 { background-position: -836px -924px}.sbsprite-mithril_generator_7 { background-position: -858px -924px}.sbsprite-zombie_ring { background-position: -880px -924px}.sbsprite-chicken_generator_7 { background-position: -902px -924px}.sbsprite-mithril_generator_6 { background-position: -924px -924px}.sbsprite-wood_chest { background-position: -946px -924px}.sbsprite-glowstone_generator_8 { background-position: -968px -924px}.sbsprite-mithril_generator_1 { background-position: -990px -924px}.sbsprite-pink_bunny_12 { background-position: -1012px -924px}.sbsprite-purple_medium_backpack { background-position: -1034px -924px}.sbsprite-glowstone_generator_7 { background-position: 0 -946px}.sbsprite-pink_bunny_11 { background-position: -22px -946px}.sbsprite-pink_bunny_10 { background-position: -44px -946px}.sbsprite-glowstone_generator_9 { background-position: -66px -946px}.sbsprite-glowstone_generator_4 { background-position: -88px -946px}.sbsprite-mithril_generator_5 { background-position: -110px -946px}.sbsprite-glowstone_generator_3 { background-position: -132px -946px}.sbsprite-mithril_generator_4 { background-position: -154px -946px}.sbsprite-glowstone_generator_6 { background-position: -176px -946px}.sbsprite-mithril_generator_3 { background-position: -198px -946px}.sbsprite-glowstone_generator_5 { background-position: -220px -946px}.sbsprite-mithril_generator_2 { background-position: -242px -946px}.sbsprite-very_official_yellow_rock { background-position: -264px -946px}.sbsprite-bat_person_talisman { background-position: -286px -946px}.sbsprite-cyan_large_backpack { background-position: -308px -946px}.sbsprite-fairy_soul { background-position: -330px -946px}.sbsprite-ghost_8 { background-position: -352px -946px}.sbsprite-ghost_9 { background-position: -374px -946px}.sbsprite-power_talisman { background-position: -396px -946px}.sbsprite-ghost_4 { background-position: -418px -946px}.sbsprite-decent_coffee { background-position: -440px -946px}.sbsprite-ghost_5 { background-position: -462px -946px}.sbsprite-ember_fragment { background-position: -484px -946px}.sbsprite-ghost_6 { background-position: -506px -946px}.sbsprite-ghost_7 { background-position: -528px -946px}.sbsprite-dull_shark_tooth_necklace { background-position: -550px -946px}.sbsprite-ghost_1 { background-position: -572px -946px}.sbsprite-ghost_2 { background-position: -594px -946px}.sbsprite-ghost_3 { background-position: -616px -946px}.sbsprite-gold_gift { background-position: -638px -946px}.sbsprite-tank_wither_helmet { background-position: -660px -946px}.sbsprite-spider_ring { background-position: -682px -946px}.sbsprite-santa_10 { background-position: -704px -946px}.sbsprite-santa_11 { background-position: -726px -946px}.sbsprite-yellow_greater_backpack { background-position: -748px -946px}.sbsprite-sapphire_crystal { background-position: -770px -946px}.sbsprite-mayor_foxy { background-position: -792px -946px}.sbsprite-starred_shadow_assassin_helmet { background-position: -814px -946px}.sbsprite-god_potion_2 { background-position: -836px -946px}.sbsprite-goblin_helmet { background-position: -858px -946px}.sbsprite-diamond_generator_5 { background-position: -880px -946px}.sbsprite-lesser_orb_of_healing { background-position: -902px -946px}.sbsprite-diamond_generator_6 { background-position: -924px -946px}.sbsprite-diamond_generator_3 { background-position: -946px -946px}.sbsprite-pet_skin_jerry_red_elf { background-position: -968px -946px}.sbsprite-diamond_generator_4 { background-position: -990px -946px}.sbsprite-lady_bug_10 { background-position: -1012px -946px}.sbsprite-diamond_generator_1 { background-position: -1034px -946px}.sbsprite-star_decorations { background-position: 0 -968px}.sbsprite-diamond_generator_2 { background-position: -22px -968px}.sbsprite-bingo_artifact { background-position: -44px -968px}.sbsprite-diamond_generator_9 { background-position: -66px -968px}.sbsprite-lady_bug_11 { background-position: -88px -968px}.sbsprite-diamond_generator_7 { background-position: -110px -968px}.sbsprite-diamond_generator_8 { background-position: -132px -968px}.sbsprite-heart_of_the_mountain { background-position: -154px -968px}.sbsprite-glowstone_generator_2 { background-position: -176px -968px}.sbsprite-glowstone_generator_1 { background-position: -198px -968px}.sbsprite-pink_donut_personality { background-position: -220px -968px}.sbsprite-artifact_of_space { background-position: -242px -968px}.sbsprite-lesser_soulflow_engine { background-position: -264px -968px}.sbsprite-mithril_crystal { background-position: -286px -968px}.sbsprite-young_fragment { background-position: -308px -968px}.sbsprite-master_catacombs_pass_10 { background-position: -330px -968px}.sbsprite-flying_bats { background-position: -352px -968px}.sbsprite-light_blue_medium_backpack { background-position: -374px -968px}.sbsprite-fast_travel_hub { background-position: -396px -968px}.sbsprite-pumpkin_generator_2 { background-position: -418px -968px}.sbsprite-pumpkin_generator_1 { background-position: -440px -968px}.sbsprite-pumpkin_generator_4 { background-position: -462px -968px}.sbsprite-end_helmet { background-position: -484px -968px}.sbsprite-pumpkin_generator_3 { background-position: -506px -968px}.sbsprite-pumpkin_generator_6 { background-position: -528px -968px}.sbsprite-titanium_talisman { background-position: -550px -968px}.sbsprite-pumpkin_generator_5 { background-position: -572px -968px}.sbsprite-reaper_gem { background-position: -594px -968px}.sbsprite-rune_zap { background-position: -616px -968px}.sbsprite-pumpkin_generator_8 { background-position: -638px -968px}.sbsprite-pumpkin_generator_7 { background-position: -660px -968px}.sbsprite-pumpkin_generator_9 { background-position: -682px -968px}.sbsprite-crooked_artifact { background-position: -704px -968px}.sbsprite-haste_ring { background-position: -726px -968px}.sbsprite-soulflow_battery { background-position: -748px -968px}.sbsprite-medium_mining_sack { background-position: -770px -968px}.sbsprite-skull_1 { background-position: -792px -968px}.sbsprite-coffin { background-position: -814px -968px}.sbsprite-chest_shelves { background-position: -836px -968px}.sbsprite-power_ring { background-position: -858px -968px}.sbsprite-white_medium_backpack { background-position: -880px -968px}.sbsprite-divan_fragment { background-position: -902px -968px}.sbsprite-skull_8 { background-position: -924px -968px}.sbsprite-gold_essence { background-position: -946px -968px}.sbsprite-skull_9 { background-position: -968px -968px}.sbsprite-skull_6 { background-position: -990px -968px}.sbsprite-skull_7 { background-position: -1012px -968px}.sbsprite-skull_4 { background-position: -1034px -968px}.sbsprite-skull_5 { background-position: 0 -990px}.sbsprite-skull_2 { background-position: -22px -990px}.sbsprite-skull_3 { background-position: -44px -990px}.sbsprite-black_jumbo_backpack { background-position: -66px -990px}.sbsprite-fast_travel_mines { background-position: -88px -990px}.sbsprite-skull_vase { background-position: -110px -990px}.sbsprite-fishing_generator_8 { background-position: -132px -990px}.sbsprite-fishing_generator_7 { background-position: -154px -990px}.sbsprite-fishing_generator_6 { background-position: -176px -990px}.sbsprite-fishing_generator_5 { background-position: -198px -990px}.sbsprite-fishing_generator_4 { background-position: -220px -990px}.sbsprite-lime_jumbo_backpack { background-position: -242px -990px}.sbsprite-fishing_generator_3 { background-position: -264px -990px}.sbsprite-fishing_generator_2 { background-position: -286px -990px}.sbsprite-fishing_generator_1 { background-position: -308px -990px}.sbsprite-fishing_generator_9 { background-position: -330px -990px}.sbsprite-yellow_large_backpack { background-position: -352px -990px}.sbsprite-amber_crystal { background-position: -374px -990px}.sbsprite-suspicious_vial { background-position: -396px -990px}.sbsprite-campfire { background-position: -418px -990px}.sbsprite-snow_generator_4 { background-position: -440px -990px}.sbsprite-snow_generator_5 { background-position: -462px -990px}.sbsprite-ring_of_space { background-position: -484px -990px}.sbsprite-snow_generator_6 { background-position: -506px -990px}.sbsprite-talisman_enrichment_walk_speed { background-position: -528px -990px}.sbsprite-snow_generator_7 { background-position: -550px -990px}.sbsprite-snow_generator_1 { background-position: -572px -990px}.sbsprite-snow_generator_2 { background-position: -594px -990px}.sbsprite-snow_generator_3 { background-position: -616px -990px}.sbsprite-lime_medium_backpack { background-position: -638px -990px}.sbsprite-end_stone_1 { background-position: -660px -990px}.sbsprite-strong_fragment { background-position: -682px -990px}.sbsprite-small_foraging_sack { background-position: -704px -990px}.sbsprite-synthetic_heart { background-position: -726px -990px}.sbsprite-end_stone_4 { background-position: -748px -990px}.sbsprite-diamond_sadan_head { background-position: -770px -990px}.sbsprite-end_stone_5 { background-position: -792px -990px}.sbsprite-end_stone_2 { background-position: -814px -990px}.sbsprite-end_stone_3 { background-position: -836px -990px}.sbsprite-diamond_bonzo_head { background-position: -858px -990px}.sbsprite-end_stone_8 { background-position: -880px -990px}.sbsprite-end_stone_9 { background-position: -902px -990px}.sbsprite-end_stone_6 { background-position: -924px -990px}.sbsprite-end_stone_7 { background-position: -946px -990px}.sbsprite-snow_generator_8 { background-position: -968px -990px}.sbsprite-snow_generator_9 { background-position: -990px -990px}.sbsprite-ender_stone_generator_4 { background-position: -1012px -990px}.sbsprite-epoch_cake_blue { background-position: -1034px -990px}.sbsprite-sand_generator_10 { background-position: 0 -1012px}.sbsprite-ender_stone_generator_3 { background-position: -22px -1012px}.sbsprite-sand_generator_11 { background-position: -44px -1012px}.sbsprite-ender_stone_generator_2 { background-position: -66px -1012px}.sbsprite-ender_stone_generator_1 { background-position: -88px -1012px}.sbsprite-pet_skin_sheep_neon_yellow { background-position: -110px -1012px}.sbsprite-fast_travel_spider { background-position: -132px -1012px}.sbsprite-pet_skin_sheep_blue { background-position: -154px -1012px}.sbsprite-epoch_cake_black { background-position: -176px -1012px}.sbsprite-wise_baby { background-position: -198px -1012px}.sbsprite-chronomatron { background-position: -220px -1012px}.sbsprite-scarf_grimoire { background-position: -242px -1012px}.sbsprite-bestiary_hub { background-position: -264px -1012px}.sbsprite-ender_stone_generator_9 { background-position: -286px -1012px}.sbsprite-ender_stone_generator_8 { background-position: -308px -1012px}.sbsprite-ender_stone_generator_7 { background-position: -330px -1012px}.sbsprite-ender_stone_generator_6 { background-position: -352px -1012px}.sbsprite-ender_stone_generator_5 { background-position: -374px -1012px}.sbsprite-small_gemstone_sack { background-position: -396px -1012px}.sbsprite-flawless_ruby_gem { background-position: -418px -1012px}.sbsprite-gold_necron_head { background-position: -440px -1012px}.sbsprite-small_husbandry_sack { background-position: -462px -1012px}.sbsprite-reaper_orb { background-position: -484px -1012px}.sbsprite-blaze_helmet { background-position: -506px -1012px}.sbsprite-bee_personality { background-position: -528px -1012px}.sbsprite-fishing { background-position: -550px -1012px}.sbsprite-titanium_ring { background-position: -572px -1012px}.sbsprite-lime { background-position: -594px -1012px}.sbsprite-feather_talisman { background-position: -616px -1012px}.sbsprite-rough_jasper_gem { background-position: -638px -1012px}.sbsprite-goblin_omelette_spicy { background-position: -660px -1012px}.sbsprite-gold_generator_11 { background-position: -682px -1012px}.sbsprite-gold_generator_10 { background-position: -704px -1012px}.sbsprite-gold_generator_12 { background-position: -726px -1012px}.sbpet-sheep_green { background-position: 0 0}.sbpet-sheep_yellow { background-position: -20px 0}.sbpet-bal { background-position: -40px 0}.sbpet-grandma_wolf { background-position: -60px 0}.sbpet-sheep_orange { background-position: -80px 0}.sbpet-sheep_red { background-position: -100px 0}.sbpet-bat { background-position: -120px 0}.sbpet-elephant_red { background-position: -140px 0}.sbpet-rabbit { background-position: -160px 0}.sbpet-megalodon_baby { background-position: -180px 0}.sbpet-silverfish { background-position: -200px 0}.sbpet-ghoul { background-position: -220px 0}.sbpet-pigman { background-position: 0 -22px}.sbpet-elephant_orange { background-position: -20px -22px}.sbpet-jerry { background-position: -40px -22px}.sbpet-sheep_neon_yellow { background-position: -60px -22px}.sbpet-rat { background-position: -80px -22px}.sbpet-tiger { background-position: -100px -22px}.sbpet-lion { background-position: -120px -22px}.sbpet-horse { background-position: -140px -22px}.sbpet-sheep_neon_green { background-position: -160px -22px}.sbpet-giraffe { background-position: -180px -22px}.sbpet-black_cat_ivory { background-position: -200px -22px}.sbpet-golden_dragon { background-position: -220px -22px}.sbpet-rock_derp { background-position: 0 -44px}.sbpet-parrot { background-position: -20px -44px}.sbpet-sheep_blue { background-position: -40px -44px}.sbpet-monkey_golden { background-position: -60px -44px}.sbpet-jellyfish { background-position: -80px -44px}.sbpet-horse_zombie { background-position: -100px -44px}.sbpet-sheep_purple { background-position: -120px -44px}.sbpet-elephant_purple { background-position: -140px -44px}.sbpet-endermite_radiant { background-position: -160px -44px}.sbpet-rock { background-position: -180px -44px}.sbpet-default { background-position: -200px -44px}.sbpet-blaze { background-position: -220px -44px}.sbpet-endermite { background-position: 0 -66px}.sbpet-megalodon_bullhead { background-position: -20px -66px}.sbpet-hound_beagle { background-position: -40px -66px}.sbpet-zombie { background-position: -60px -66px}.sbpet-guardian { background-position: -80px -66px}.sbpet-scatha { background-position: -100px -66px}.sbpet-wolf { background-position: -120px -66px}.sbpet-rabbit_aquamarine { background-position: -140px -66px}.sbpet-spirit { background-position: -160px -66px}.sbpet-hound { background-position: -180px -66px}.sbpet-dragon_neon_purple { background-position: -200px -66px}.sbpet-tiger_twilight { background-position: -220px -66px}.sbpet-sheep_light_green { background-position: 0 -88px}.sbpet-monkey_gorilla { background-position: -20px -88px}.sbpet-spider { background-position: -40px -88px}.sbpet-mithril_golem { background-position: -60px -88px}.sbpet-dolphin_snubnose { background-position: -80px -88px}.sbpet-snowman { background-position: -100px -88px}.sbpet-bee { background-position: -120px -88px}.sbpet-monkey { background-position: -140px -88px}.sbpet-jerry_red_elf { background-position: -160px -88px}.sbpet-elephant_pink { background-position: -180px -88px}.sbpet-sheep_brown { background-position: -200px -88px}.sbpet-magma_cube { background-position: -220px -88px}.sbpet-pig { background-position: 0 -110px}.sbpet-blue_whale { background-position: -20px -110px}.sbpet-skeleton { background-position: -40px -110px}.sbpet-phoenix_ice { background-position: -60px -110px}.sbpet-ammonite { background-position: -80px -110px}.sbpet-elephant_green { background-position: -100px -110px}.sbpet-armadillo { background-position: -120px -110px}.sbpet-dolphin { background-position: -140px -110px}.sbpet-turtle { background-position: -160px -110px}.sbpet-dragon_neon_red { background-position: -180px -110px}.sbpet-tiger_saber_tooth { background-position: -200px -110px}.sbpet-wither_skeleton { background-position: -220px -110px}.sbpet-parrot_blue_macaw { background-position: 0 -132px}.sbpet-ocelot { background-position: -20px -132px}.sbpet-sheep_light_gray { background-position: -40px -132px}.sbpet-elephant_blue { background-position: -60px -132px}.sbpet-chicken_baby_chick { background-position: -80px -132px}.sbpet-rock_thinking { background-position: -100px -132px}.sbpet-enderman_slayer { background-position: -120px -132px}.sbpet-ender_dragon { background-position: -140px -132px}.sbpet-rabbit_rose { background-position: -160px -132px}.sbpet-sheep_white { background-position: -180px -132px}.sbpet-silverfish_fossilized { background-position: -200px -132px}.sbpet-squid { background-position: -220px -132px}.sbpet-sheep_light_blue { background-position: 0 -154px}.sbpet-elephant { background-position: -20px -154px}.sbpet-golden_dragon_egg { background-position: -40px -154px}.sbpet-enderman { background-position: -60px -154px}.sbpet-chicken { background-position: -80px -154px}.sbpet-parrot_gold_macaw { background-position: -100px -154px}.sbpet-sheep_gray { background-position: -120px -154px}.sbpet-rock_cool { background-position: -140px -154px}.sbpet-rock_laugh { background-position: -160px -154px}.sbpet-sheep_black { background-position: -180px -154px}.sbpet-sheep_neon_blue { background-position: -200px -154px}.sbpet-rock_embarrassed { background-position: -220px -154px}.sbpet-dragon_neon_blue { background-position: 0 -176px}.sbpet-sheep { background-position: -20px -176px}.sbpet-baby_yeti { background-position: -40px -176px}.sbpet-sheep_aqua { background-position: -60px -176px}.sbpet-sheep_pink { background-position: -80px -176px}.sbpet-elephant_monochrome { background-position: -100px -176px}.sbpet-wolf_henzo_doggo { background-position: -120px -176px}.sbpet-squid_glow { background-position: -140px -176px}.sbpet-flying_fish { background-position: -160px -176px}.sbpet-griffin { background-position: -180px -176px}.sbpet-jerry_green_elf { background-position: -200px -176px}.sbpet-dragon_pastel { background-position: -220px -176px}.sbpet-sheep_neon_red { background-position: 0 -198px}.sbpet-sheep_magenta { background-position: -20px -198px}.sbpet-skeleton_horse { background-position: -40px -198px}.sbpet-megalodon { background-position: -60px -198px}.sbpet-lion_lioness { background-position: -80px -198px}.sbpet-tarantula { background-position: -100px -198px}.sbpet-yeti_grown_up { background-position: -120px -198px}.sbpet-phoenix { background-position: -140px -198px}.sbpet-golem { background-position: -160px -198px}.sbpet-black_cat { background-position: -180px -198px}.sbpet-whale_orca { background-position: -200px -198px}.sbpet-rock_smile { background-position: -220px -198px}.sbpet-wither { background-position: 0 -220px}.sbpet-black_cat_onyx { background-position: -20px -220px}.sbspray-AngryTurkey { background-position: 0 0}.sbspray-AnotherDimension { background-position: -128px 0}.sbspray-BlueArrowE { background-position: -256px 0}.sbspray-BlueArrowN { background-position: -384px 0}.sbspray-BlueArrowNE { background-position: -512px 0}.sbspray-BlueArrowNW { background-position: -640px 0}.sbspray-BlueArrowS { background-position: -768px 0}.sbspray-BlueArrowSE { background-position: -896px 0}.sbspray-BlueArrowSW { background-position: -1024px 0}.sbspray-BlueArrowW { background-position: -1152px 0}.sbspray-Bonzo { background-position: 0 -128px}.sbspray-Boom { background-position: -128px -128px}.sbspray-BunnyGG { background-position: -256px -128px}.sbspray-ChestGlow { background-position: -384px -128px}.sbspray-Chill { background-position: -512px -128px}.sbspray-Chimney { background-position: -640px -128px}.sbspray-ChocolateFeast { background-position: -768px -128px}.sbspray-ChristmasTree { background-position: -896px -128px}.sbspray-Coconut { background-position: -1024px -128px}.sbspray-Creeper { background-position: -1152px -128px}.sbspray-EasterBasket { background-position: 0 -256px}.sbspray-EasterCreeper { background-position: -128px -256px}.sbspray-EasterEggs { background-position: -256px -256px}.sbspray-Eek { background-position: -384px -256px}.sbspray-EggHunt { background-position: -512px -256px}.sbspray-EggSurprise { background-position: -640px -256px}.sbspray-Faboolous { background-position: -768px -256px}.sbspray-FarmingArrowE { background-position: -896px -256px}.sbspray-FarmingArrowN { background-position: -1024px -256px}.sbspray-FarmingArrowS { background-position: -1152px -256px}.sbspray-FarmingArrowW { background-position: 0 -384px}.sbspray-FoundU { background-position: -128px -384px}.sbspray-Garlic { background-position: -256px -384px}.sbspray-GenericArmor { background-position: -384px -384px}.sbspray-GenericBooks { background-position: -512px -384px}.sbspray-GenericFishing { background-position: -640px -384px}.sbspray-GenericMob { background-position: -768px -384px}.sbspray-GenericOres { background-position: -896px -384px}.sbspray-GenericPotions { background-position: -1024px -384px}.sbspray-GenericWeapons { background-position: -1152px -384px}.sbspray-GoldenEgg { background-position: 0 -512px}.sbspray-Heart { background-position: -128px -512px}.sbspray-Hypixel { background-position: -256px -512px}.sbspray-HypixelDark { background-position: -384px -512px}.sbspray-IceCream { background-position: -512px -512px}.sbspray-Kite { background-position: -640px -512px}.sbspray-LetUsIn { background-position: -768px -512px}.sbspray-Lifebelt { background-position: -896px -512px}.sbspray-MinionAnimals { background-position: -1024px -512px}.sbspray-MinionFarming { background-position: -1152px -512px}.sbspray-MinionForaging { background-position: 0 -640px}.sbspray-MinionMining { background-position: -128px -640px}.sbspray-MinionMisc { background-position: -256px -640px}.sbspray-MinionMonsters { background-position: -384px -640px}.sbspray-OnFire { background-position: -512px -640px}.sbspray-Porkchop { background-position: -640px -640px}.sbspray-PortalArrowE { background-position: -768px -640px}.sbspray-PortalArrowN { background-position: -896px -640px}.sbspray-PortalArrowS { background-position: -1024px -640px}.sbspray-PortalArrowW { background-position: -1152px -640px}.sbspray-Presents { background-position: 0 -768px}.sbspray-Puffer { background-position: -128px -768px}.sbspray-PuppySurprise { background-position: -256px -768px}.sbspray-RabbitCostume { background-position: -384px -768px}.sbspray-RedArrowE { background-position: -512px -768px}.sbspray-RedArrowN { background-position: -640px -768px}.sbspray-RedArrowNE { background-position: -768px -768px}.sbspray-RedArrowNW { background-position: -896px -768px}.sbspray-RedArrowS { background-position: -1024px -768px}.sbspray-RedArrowSE { background-position: -1152px -768px}.sbspray-RedArrowSW { background-position: 0 -896px}.sbspray-RedArrowW { background-position: -128px -896px}.sbspray-SandCastleH { background-position: -256px -896px}.sbspray-Sandcastle { background-position: -384px -896px}.sbspray-SantaJerry { background-position: -512px -896px}.sbspray-SantaSlips { background-position: -640px -896px}.sbspray-Sign { background-position: -768px -896px}.sbspray-SkyBlockChristmas { background-position: -896px -896px}.sbspray-SniperSnowball { background-position: -1024px -896px}.sbspray-Snowball { background-position: -1152px -896px}.sbspray-StorageArrowE { background-position: 0 -1024px}.sbspray-StorageArrowN { background-position: -128px -1024px}.sbspray-StorageArrowS { background-position: -256px -1024px}.sbspray-StorageArrowW { background-position: -384px -1024px}.sbspray-Surfing { background-position: -512px -1024px}.sbspray-TheWrongEggs { background-position: -640px -1024px}.sbspray-Trap { background-position: -768px -1024px}.sbspray-TrickOrTreat { background-position: -896px -1024px}.sbspray-UndeadJerry { background-position: -1024px -1024px}.sbspray-Volleyball { background-position: -1152px -1024px}.sbspray-Watcher { background-position: 0 -1152px}.sbspray-Whoosh { background-position: -128px -1152px}.sbspray-WitchPlease { background-position: -256px -1152px}.sbspray-Wreath { background-position: -384px -1152px}.sbspray-YellowArrowE { background-position: -512px -1152px}.sbspray-YellowArrowN { background-position: -640px -1152px}.sbspray-YellowArrowNE { background-position: -768px -1152px}.sbspray-YellowArrowNW { background-position: -896px -1152px}.sbspray-YellowArrowS { background-position: -1024px -1152px}.sbspray-YellowArrowSE { background-position: -1152px -1152px}.sbspray-YellowArrowSW { background-position: -1280px 0}.sbspray-YellowArrowW { background-position: -1280px -128px}.mcsprite-acacia_boat { background-position: 0 0}.mcsprite-acacia_button { background-position: -32px 0}.mcsprite-acacia_door { background-position: -64px 0}.mcsprite-acacia_fence { background-position: -96px 0}.mcsprite-acacia_fence_gate { background-position: -128px 0}.mcsprite-acacia_leaves { background-position: -160px 0}.mcsprite-acacia_log { background-position: -192px 0}.mcsprite-acacia_planks { background-position: -224px 0}.mcsprite-acacia_pressure_plate { background-position: -256px 0}.mcsprite-acacia_sapling { background-position: -288px 0}.mcsprite-acacia_sign { background-position: -320px 0}.mcsprite-acacia_slab { background-position: -352px 0}.mcsprite-acacia_stairs { background-position: -384px 0}.mcsprite-acacia_trapdoor { background-position: -416px 0}.mcsprite-acacia_wood { background-position: -448px 0}.mcsprite-acacia_wood_button { background-position: -480px 0}.mcsprite-acacia_wood_door { background-position: -512px 0}.mcsprite-acacia_wood_fence { background-position: -544px 0}.mcsprite-acacia_wood_fence_gate { background-position: -576px 0}.mcsprite-acacia_wood_planks { background-position: -608px 0}.mcsprite-acacia_wood_pressure_plate { background-position: -640px 0}.mcsprite-acacia_wood_sign { background-position: -672px 0}.mcsprite-acacia_wood_slab { background-position: -704px 0}.mcsprite-acacia_wood_stairs { background-position: -736px 0}.mcsprite-acacia_wood_trapdoor { background-position: -768px 0}.mcsprite-activator_rail { background-position: -800px 0}.mcsprite-adult_carrots { background-position: -832px 0}.mcsprite-adult_nether_warts { background-position: -864px 0}.mcsprite-adult_potatoes { background-position: -896px 0}.mcsprite-adult_wheat_crops { background-position: -928px 0}.mcsprite-air { background-position: -960px 0}.mcsprite-allium { background-position: -992px 0}.mcsprite-amethyst_cluster { background-position: -1024px 0}.mcsprite-amethyst_shard { background-position: -1056px 0}.mcsprite-ancient_debris { background-position: -1088px 0}.mcsprite-andesite { background-position: -1120px 0}.mcsprite-andesite_slab { background-position: -1152px 0}.mcsprite-andesite_stairs { background-position: -1184px 0}.mcsprite-andesite_wall { background-position: -1216px 0}.mcsprite-anvil { background-position: -1248px 0}.mcsprite-apple { background-position: 0 -32px}.mcsprite-armor_stand { background-position: -32px -32px}.mcsprite-arrow { background-position: -64px -32px}.mcsprite-arrow_loaded_crossbow { background-position: -96px -32px}.mcsprite-arrow_of_decay { background-position: -128px -32px}.mcsprite-arrow_of_fire_resistance { background-position: -160px -32px}.mcsprite-arrow_of_harming { background-position: -192px -32px}.mcsprite-arrow_of_healing { background-position: -224px -32px}.mcsprite-arrow_of_invisibility { background-position: -256px -32px}.mcsprite-arrow_of_leaping { background-position: -288px -32px}.mcsprite-arrow_of_luck { background-position: -320px -32px}.mcsprite-arrow_of_night_vision { background-position: -352px -32px}.mcsprite-arrow_of_poison { background-position: -384px -32px}.mcsprite-arrow_of_regeneration { background-position: -416px -32px}.mcsprite-arrow_of_slow_falling { background-position: -448px -32px}.mcsprite-arrow_of_slowness { background-position: -480px -32px}.mcsprite-arrow_of_splashing { background-position: -512px -32px}.mcsprite-arrow_of_strength { background-position: -544px -32px}.mcsprite-arrow_of_swiftness { background-position: -576px -32px}.mcsprite-arrow_of_the_turtle_master { background-position: -608px -32px}.mcsprite-arrow_of_water_breathing { background-position: -640px -32px}.mcsprite-arrow_of_weakness { background-position: -672px -32px}.mcsprite-awkward_lingering_potion { background-position: -704px -32px}.mcsprite-awkward_potion { background-position: -736px -32px}.mcsprite-awkward_splash_potion { background-position: -768px -32px}.mcsprite-axolotl_spawn_egg { background-position: -800px -32px}.mcsprite-azalea { background-position: -832px -32px}.mcsprite-azalea_leaves { background-position: -864px -32px}.mcsprite-azure_bluet { background-position: -896px -32px}.mcsprite-baked_potato { background-position: -928px -32px}.mcsprite-bamboo { background-position: -960px -32px}.mcsprite-banner { background-position: -992px -32px}.mcsprite-barrel { background-position: -1024px -32px}.mcsprite-barrier { background-position: -1056px -32px}.mcsprite-basalt { background-position: -1088px -32px}.mcsprite-bat_spawn_egg { background-position: -1120px -32px}.mcsprite-beacon { background-position: -1152px -32px}.mcsprite-bedrock { background-position: -1184px -32px}.mcsprite-bee_nest { background-position: -1216px -32px}.mcsprite-bee_spawn_egg { background-position: -1248px -32px}.mcsprite-beehive { background-position: 0 -64px}.mcsprite-beetroot { background-position: -32px -64px}.mcsprite-beetroot_seeds { background-position: -64px -64px}.mcsprite-beetroot_soup { background-position: -96px -64px}.mcsprite-beetroots { background-position: -128px -64px}.mcsprite-bell { background-position: -160px -64px}.mcsprite-big_dripleaf { background-position: -192px -64px}.mcsprite-birch_boat { background-position: -224px -64px}.mcsprite-birch_button { background-position: -256px -64px}.mcsprite-birch_door { background-position: -288px -64px}.mcsprite-birch_fence { background-position: -320px -64px}.mcsprite-birch_fence_gate { background-position: -352px -64px}.mcsprite-birch_leaves { background-position: -384px -64px}.mcsprite-birch_log { background-position: -416px -64px}.mcsprite-birch_planks { background-position: -448px -64px}.mcsprite-birch_pressure_plate { background-position: -480px -64px}.mcsprite-birch_sapling { background-position: -512px -64px}.mcsprite-birch_sign { background-position: -544px -64px}.mcsprite-birch_slab { background-position: -576px -64px}.mcsprite-birch_stairs { background-position: -608px -64px}.mcsprite-birch_trapdoor { background-position: -640px -64px}.mcsprite-birch_wood { background-position: -672px -64px}.mcsprite-birch_wood_button { background-position: -704px -64px}.mcsprite-birch_wood_door { background-position: -736px -64px}.mcsprite-birch_wood_fence { background-position: -768px -64px}.mcsprite-birch_wood_fence_gate { background-position: -800px -64px}.mcsprite-birch_wood_planks { background-position: -832px -64px}.mcsprite-birch_wood_pressure_plate { background-position: -864px -64px}.mcsprite-birch_wood_sign { background-position: -896px -64px}.mcsprite-birch_wood_slab { background-position: -928px -64px}.mcsprite-birch_wood_stairs { background-position: -960px -64px}.mcsprite-birch_wood_trapdoor { background-position: -992px -64px}.mcsprite-black_banner { background-position: -1024px -64px}.mcsprite-black_bed { background-position: -1056px -64px}.mcsprite-black_bed_lce { background-position: -1088px -64px}.mcsprite-black_candle { background-position: -1120px -64px}.mcsprite-black_carpet { background-position: -1152px -64px}.mcsprite-black_concrete { background-position: -1184px -64px}.mcsprite-black_concrete_powder { background-position: -1216px -64px}.mcsprite-black_dye { background-position: -1248px -64px}.mcsprite-black_firework_star { background-position: 0 -96px}.mcsprite-black_glazed_terracotta { background-position: -32px -96px}.mcsprite-black_shield { background-position: -64px -96px}.mcsprite-black_shulker_box { background-position: -96px -96px}.mcsprite-black_stained_glass { background-position: -128px -96px}.mcsprite-black_stained_glass_pane { background-position: -160px -96px}.mcsprite-black_terracotta { background-position: -192px -96px}.mcsprite-black_wool { background-position: -224px -96px}.mcsprite-blackstone { background-position: -256px -96px}.mcsprite-blackstone_slab { background-position: -288px -96px}.mcsprite-blackstone_stairs { background-position: -320px -96px}.mcsprite-blackstone_wall { background-position: -352px -96px}.mcsprite-blast_furnace { background-position: -384px -96px}.mcsprite-blaze_powder { background-position: -416px -96px}.mcsprite-blaze_rod { background-position: -448px -96px}.mcsprite-blaze_spawn_egg { background-position: -480px -96px}.mcsprite-block_of_amethyst { background-position: -512px -96px}.mcsprite-block_of_coal { background-position: -544px -96px}.mcsprite-block_of_copper { background-position: -576px -96px}.mcsprite-block_of_diamond { background-position: -608px -96px}.mcsprite-block_of_emerald { background-position: -640px -96px}.mcsprite-block_of_gold { background-position: -672px -96px}.mcsprite-block_of_iron { background-position: -704px -96px}.mcsprite-block_of_lapis_lazuli { background-position: -736px -96px}.mcsprite-block_of_netherite { background-position: -768px -96px}.mcsprite-block_of_quartz { background-position: -800px -96px}.mcsprite-block_of_raw_copper { background-position: -832px -96px}.mcsprite-block_of_raw_gold { background-position: -864px -96px}.mcsprite-block_of_raw_iron { background-position: -896px -96px}.mcsprite-block_of_redstone { background-position: -928px -96px}.mcsprite-blue_banner { background-position: -960px -96px}.mcsprite-blue_bed { background-position: -992px -96px}.mcsprite-blue_bed_lce { background-position: -1024px -96px}.mcsprite-blue_candle { background-position: -1056px -96px}.mcsprite-blue_carpet { background-position: -1088px -96px}.mcsprite-blue_concrete { background-position: -1120px -96px}.mcsprite-blue_concrete_powder { background-position: -1152px -96px}.mcsprite-blue_dye { background-position: -1184px -96px}.mcsprite-blue_firework_star { background-position: -1216px -96px}.mcsprite-blue_glazed_terracotta { background-position: -1248px -96px}.mcsprite-blue_ice { background-position: 0 -128px}.mcsprite-blue_orchid { background-position: -32px -128px}.mcsprite-blue_shield { background-position: -64px -128px}.mcsprite-blue_shulker_box { background-position: -96px -128px}.mcsprite-blue_stained_glass { background-position: -128px -128px}.mcsprite-blue_stained_glass_pane { background-position: -160px -128px}.mcsprite-blue_terracotta { background-position: -192px -128px}.mcsprite-blue_wool { background-position: -224px -128px}.mcsprite-bone { background-position: -256px -128px}.mcsprite-bone_block { background-position: -288px -128px}.mcsprite-bone_meal { background-position: -320px -128px}.mcsprite-book { background-position: -352px -128px}.mcsprite-book_and_quill { background-position: -384px -128px}.mcsprite-bookshelf { background-position: -416px -128px}.mcsprite-bottle_o_enchanting { background-position: -448px -128px}.mcsprite-bow { background-position: -480px -128px}.mcsprite-bowl { background-position: -512px -128px}.mcsprite-brain_coral { background-position: -544px -128px}.mcsprite-brain_coral_block { background-position: -576px -128px}.mcsprite-brain_coral_fan { background-position: -608px -128px}.mcsprite-bread { background-position: -640px -128px}.mcsprite-brewing_stand { background-position: -672px -128px}.mcsprite-brick { background-position: -704px -128px}.mcsprite-brick_slab { background-position: -736px -128px}.mcsprite-brick_slab_old { background-position: -768px -128px}.mcsprite-brick_stairs { background-position: -800px -128px}.mcsprite-brick_wall { background-position: -832px -128px}.mcsprite-bricks { background-position: -864px -128px}.mcsprite-bricks_old { background-position: -896px -128px}.mcsprite-broken_anvil { background-position: -928px -128px}.mcsprite-broken_elytra { background-position: -960px -128px}.mcsprite-brown_banner { background-position: -992px -128px}.mcsprite-brown_bed { background-position: -1024px -128px}.mcsprite-brown_bed_lce { background-position: -1056px -128px}.mcsprite-brown_candle { background-position: -1088px -128px}.mcsprite-brown_carpet { background-position: -1120px -128px}.mcsprite-brown_concrete { background-position: -1152px -128px}.mcsprite-brown_concrete_powder { background-position: -1184px -128px}.mcsprite-brown_dye { background-position: -1216px -128px}.mcsprite-brown_firework_star { background-position: -1248px -128px}.mcsprite-brown_glazed_terracotta { background-position: 0 -160px}.mcsprite-brown_mushroom { background-position: -32px -160px}.mcsprite-brown_mushroom_block { background-position: -64px -160px}.mcsprite-brown_shield { background-position: -96px -160px}.mcsprite-brown_shulker_box { background-position: -128px -160px}.mcsprite-brown_stained_glass { background-position: -160px -160px}.mcsprite-brown_stained_glass_pane { background-position: -192px -160px}.mcsprite-brown_terracotta { background-position: -224px -160px}.mcsprite-brown_wool { background-position: -256px -160px}.mcsprite-bubble_column { background-position: -288px -160px}.mcsprite-bubble_coral { background-position: -320px -160px}.mcsprite-bubble_coral_block { background-position: -352px -160px}.mcsprite-bubble_coral_fan { background-position: -384px -160px}.mcsprite-bucket { background-position: -416px -160px}.mcsprite-bucket_of_axolotl { background-position: -448px -160px}.mcsprite-bucket_of_cod { background-position: -480px -160px}.mcsprite-bucket_of_pufferfish { background-position: -512px -160px}.mcsprite-bucket_of_salmon { background-position: -544px -160px}.mcsprite-bucket_of_tropical_fish { background-position: -576px -160px}.mcsprite-budding_amethyst { background-position: -608px -160px}.mcsprite-bundle { background-position: -640px -160px}.mcsprite-buried_treasure_map { background-position: -672px -160px}.mcsprite-cactus { background-position: -704px -160px}.mcsprite-cactus_green { background-position: -736px -160px}.mcsprite-cake { background-position: -768px -160px}.mcsprite-calcite { background-position: -800px -160px}.mcsprite-campfire { background-position: -832px -160px}.mcsprite-candle { background-position: -864px -160px}.mcsprite-carrot { background-position: -896px -160px}.mcsprite-carrot_on_a_stick { background-position: -928px -160px}.mcsprite-cartography_table { background-position: -960px -160px}.mcsprite-carved_pumpkin { background-position: -992px -160px}.mcsprite-cast_fishing_rod { background-position: -1024px -160px}.mcsprite-cat_spawn_egg { background-position: -1056px -160px}.mcsprite-cauldron { background-position: -1088px -160px}.mcsprite-cave_air { background-position: -1120px -160px}.mcsprite-cave_spider_spawn_egg { background-position: -1152px -160px}.mcsprite-chain { background-position: -1184px -160px}.mcsprite-chainmail_boots { background-position: -1216px -160px}.mcsprite-chainmail_chestplate { background-position: -1248px -160px}.mcsprite-chainmail_helmet { background-position: 0 -192px}.mcsprite-chainmail_leggings { background-position: -32px -192px}.mcsprite-charcoal { background-position: -64px -192px}.mcsprite-chest { background-position: -96px -192px}.mcsprite-chicken_spawn_egg { background-position: -128px -192px}.mcsprite-chipped_anvil { background-position: -160px -192px}.mcsprite-chiseled_deepslate { background-position: -192px -192px}.mcsprite-chiseled_nether_bricks { background-position: -224px -192px}.mcsprite-chiseled_polished_blackstone { background-position: -256px -192px}.mcsprite-chiseled_quartz_block { background-position: -288px -192px}.mcsprite-chiseled_red_sandstone { background-position: -320px -192px}.mcsprite-chiseled_sandstone { background-position: -352px -192px}.mcsprite-chiseled_stone_bricks { background-position: -384px -192px}.mcsprite-chiseled_stone_bricks_monster_egg { background-position: -416px -192px}.mcsprite-chorus_flower { background-position: -448px -192px}.mcsprite-chorus_fruit { background-position: -480px -192px}.mcsprite-chorus_plant { background-position: -512px -192px}.mcsprite-clay { background-position: -544px -192px}.mcsprite-clay_ball { background-position: -576px -192px}.mcsprite-clock { background-position: -608px -192px}.mcsprite-clownfish { background-position: -640px -192px}.mcsprite-coal { background-position: -672px -192px}.mcsprite-coal_ore { background-position: -704px -192px}.mcsprite-coarse_dirt { background-position: -736px -192px}.mcsprite-cobbled_deepslate { background-position: -768px -192px}.mcsprite-cobbled_deepslate_slab { background-position: -800px -192px}.mcsprite-cobbled_deepslate_stairs { background-position: -832px -192px}.mcsprite-cobbled_deepslate_wall { background-position: -864px -192px}.mcsprite-cobblestone { background-position: -896px -192px}.mcsprite-cobblestone_monster_egg { background-position: -928px -192px}.mcsprite-cobblestone_slab { background-position: -960px -192px}.mcsprite-cobblestone_stairs { background-position: -992px -192px}.mcsprite-cobblestone_wall { background-position: -1024px -192px}.mcsprite-cobweb { background-position: -1056px -192px}.mcsprite-cocoa_beans { background-position: -1088px -192px}.mcsprite-cod_spawn_egg { background-position: -1120px -192px}.mcsprite-command_block { background-position: -1152px -192px}.mcsprite-compass { background-position: -1184px -192px}.mcsprite-composter { background-position: -1216px -192px}.mcsprite-conduit { background-position: -1248px -192px}.mcsprite-cooked_beef { background-position: 0 -224px}.mcsprite-cooked_chicken { background-position: -32px -224px}.mcsprite-cooked_cod { background-position: -64px -224px}.mcsprite-cooked_fish { background-position: -96px -224px}.mcsprite-cooked_mutton { background-position: -128px -224px}.mcsprite-cooked_porkchop { background-position: -160px -224px}.mcsprite-cooked_rabbit { background-position: -192px -224px}.mcsprite-cooked_salmon { background-position: -224px -224px}.mcsprite-cookie { background-position: -256px -224px}.mcsprite-copper_block { background-position: -288px -224px}.mcsprite-copper_ingot { background-position: -320px -224px}.mcsprite-copper_ore { background-position: -352px -224px}.mcsprite-cornflower { background-position: -384px -224px}.mcsprite-cow_spawn_egg { background-position: -416px -224px}.mcsprite-cracked_deepslate_bricks { background-position: -448px -224px}.mcsprite-cracked_deepslate_tiles { background-position: -480px -224px}.mcsprite-cracked_nether_bricks { background-position: -512px -224px}.mcsprite-cracked_polished_blackstone_bricks { background-position: -544px -224px}.mcsprite-cracked_stone_bricks { background-position: -576px -224px}.mcsprite-cracked_stone_bricks_monster_egg { background-position: -608px -224px}.mcsprite-crafting_table { background-position: -640px -224px}.mcsprite-creeper_head { background-position: -672px -224px}.mcsprite-creeper_spawn_egg { background-position: -704px -224px}.mcsprite-crimson_button { background-position: -736px -224px}.mcsprite-crimson_door { background-position: -768px -224px}.mcsprite-crimson_fence { background-position: -800px -224px}.mcsprite-crimson_fence_gate { background-position: -832px -224px}.mcsprite-crimson_fungus { background-position: -864px -224px}.mcsprite-crimson_hyphae { background-position: -896px -224px}.mcsprite-crimson_nylium { background-position: -928px -224px}.mcsprite-crimson_planks { background-position: -960px -224px}.mcsprite-crimson_pressure_plate { background-position: -992px -224px}.mcsprite-crimson_roots { background-position: -1024px -224px}.mcsprite-crimson_sign { background-position: -1056px -224px}.mcsprite-crimson_slab { background-position: -1088px -224px}.mcsprite-crimson_stairs { background-position: -1120px -224px}.mcsprite-crimson_stem { background-position: -1152px -224px}.mcsprite-crimson_trapdoor { background-position: -1184px -224px}.mcsprite-crossbow { background-position: -1216px -224px}.mcsprite-crying_obsidian { background-position: -1248px -224px}.mcsprite-cut_copper { background-position: 0 -256px}.mcsprite-cut_copper_block { background-position: -32px -256px}.mcsprite-cut_copper_slab { background-position: -64px -256px}.mcsprite-cut_copper_stairs { background-position: -96px -256px}.mcsprite-cut_red_sandstone { background-position: -128px -256px}.mcsprite-cut_red_sandstone_slab { background-position: -160px -256px}.mcsprite-cut_sandstone { background-position: -192px -256px}.mcsprite-cut_sandstone_slab { background-position: -224px -256px}.mcsprite-cyan_banner { background-position: -256px -256px}.mcsprite-cyan_bed { background-position: -288px -256px}.mcsprite-cyan_bed_lce { background-position: -320px -256px}.mcsprite-cyan_candle { background-position: -352px -256px}.mcsprite-cyan_carpet { background-position: -384px -256px}.mcsprite-cyan_concrete { background-position: -416px -256px}.mcsprite-cyan_concrete_powder { background-position: -448px -256px}.mcsprite-cyan_dye { background-position: -480px -256px}.mcsprite-cyan_firework_star { background-position: -512px -256px}.mcsprite-cyan_glazed_terracotta { background-position: -544px -256px}.mcsprite-cyan_shield { background-position: -576px -256px}.mcsprite-cyan_shulker_box { background-position: -608px -256px}.mcsprite-cyan_stained_glass { background-position: -640px -256px}.mcsprite-cyan_stained_glass_pane { background-position: -672px -256px}.mcsprite-cyan_terracotta { background-position: -704px -256px}.mcsprite-cyan_wool { background-position: -736px -256px}.mcsprite-dandelion { background-position: -768px -256px}.mcsprite-dandelion_yellow { background-position: -800px -256px}.mcsprite-dark_oak_boat { background-position: -832px -256px}.mcsprite-dark_oak_button { background-position: -864px -256px}.mcsprite-dark_oak_door { background-position: -896px -256px}.mcsprite-dark_oak_fence { background-position: -928px -256px}.mcsprite-dark_oak_fence_gate { background-position: -960px -256px}.mcsprite-dark_oak_leaves { background-position: -992px -256px}.mcsprite-dark_oak_log { background-position: -1024px -256px}.mcsprite-dark_oak_planks { background-position: -1056px -256px}.mcsprite-dark_oak_pressure_plate { background-position: -1088px -256px}.mcsprite-dark_oak_sapling { background-position: -1120px -256px}.mcsprite-dark_oak_sign { background-position: -1152px -256px}.mcsprite-dark_oak_slab { background-position: -1184px -256px}.mcsprite-dark_oak_stairs { background-position: -1216px -256px}.mcsprite-dark_oak_trapdoor { background-position: -1248px -256px}.mcsprite-dark_oak_wood { background-position: 0 -288px}.mcsprite-dark_oak_wood_button { background-position: -32px -288px}.mcsprite-dark_oak_wood_door { background-position: -64px -288px}.mcsprite-dark_oak_wood_fence { background-position: -96px -288px}.mcsprite-dark_oak_wood_fence_gate { background-position: -128px -288px}.mcsprite-dark_oak_wood_planks { background-position: -160px -288px}.mcsprite-dark_oak_wood_pressure_plate { background-position: -192px -288px}.mcsprite-dark_oak_wood_sign { background-position: -224px -288px}.mcsprite-dark_oak_wood_slab { background-position: -256px -288px}.mcsprite-dark_oak_wood_stairs { background-position: -288px -288px}.mcsprite-dark_oak_wood_trapdoor { background-position: -320px -288px}.mcsprite-dark_prismarine { background-position: -352px -288px}.mcsprite-dark_prismarine_slab { background-position: -384px -288px}.mcsprite-dark_prismarine_stairs { background-position: -416px -288px}.mcsprite-daylight_detector { background-position: -448px -288px}.mcsprite-daylight_sensor { background-position: -480px -288px}.mcsprite-dead_brain_coral { background-position: -512px -288px}.mcsprite-dead_brain_coral_block { background-position: -544px -288px}.mcsprite-dead_brain_coral_fan { background-position: -576px -288px}.mcsprite-dead_bubble_coral { background-position: -608px -288px}.mcsprite-dead_bubble_coral_block { background-position: -640px -288px}.mcsprite-dead_bubble_coral_fan { background-position: -672px -288px}.mcsprite-dead_bush { background-position: -704px -288px}.mcsprite-dead_fire_coral { background-position: -736px -288px}.mcsprite-dead_fire_coral_block { background-position: -768px -288px}.mcsprite-dead_fire_coral_fan { background-position: -800px -288px}.mcsprite-dead_horn_coral { background-position: -832px -288px}.mcsprite-dead_horn_coral_block { background-position: -864px -288px}.mcsprite-dead_horn_coral_fan { background-position: -896px -288px}.mcsprite-dead_tube_coral { background-position: -928px -288px}.mcsprite-dead_tube_coral_block { background-position: -960px -288px}.mcsprite-dead_tube_coral_fan { background-position: -992px -288px}.mcsprite-debug_stick { background-position: -1024px -288px}.mcsprite-deepslate { background-position: -1056px -288px}.mcsprite-deepslate_brick_slab { background-position: -1088px -288px}.mcsprite-deepslate_brick_stairs { background-position: -1120px -288px}.mcsprite-deepslate_brick_wall { background-position: -1152px -288px}.mcsprite-deepslate_bricks { background-position: -1184px -288px}.mcsprite-deepslate_coal_ore { background-position: -1216px -288px}.mcsprite-deepslate_copper_ore { background-position: -1248px -288px}.mcsprite-deepslate_diamond_ore { background-position: 0 -320px}.mcsprite-deepslate_emerald_ore { background-position: -32px -320px}.mcsprite-deepslate_gold_ore { background-position: -64px -320px}.mcsprite-deepslate_iron_ore { background-position: -96px -320px}.mcsprite-deepslate_lapis_lazuli_ore { background-position: -128px -320px}.mcsprite-deepslate_redstone_ore { background-position: -160px -320px}.mcsprite-deepslate_tile_slab { background-position: -192px -320px}.mcsprite-deepslate_tile_stairs { background-position: -224px -320px}.mcsprite-deepslate_tile_wall { background-position: -256px -320px}.mcsprite-deepslate_tiles { background-position: -288px -320px}.mcsprite-detector_rail { background-position: -320px -320px}.mcsprite-diamond { background-position: -352px -320px}.mcsprite-diamond_axe { background-position: -384px -320px}.mcsprite-diamond_boots { background-position: -416px -320px}.mcsprite-diamond_chestplate { background-position: -448px -320px}.mcsprite-diamond_helmet { background-position: -480px -320px}.mcsprite-diamond_hoe { background-position: -512px -320px}.mcsprite-diamond_horse_armor { background-position: -544px -320px}.mcsprite-diamond_leggings { background-position: -576px -320px}.mcsprite-diamond_ore { background-position: -608px -320px}.mcsprite-diamond_pickaxe { background-position: -640px -320px}.mcsprite-diamond_shovel { background-position: -672px -320px}.mcsprite-diamond_sword { background-position: -704px -320px}.mcsprite-diorite { background-position: -736px -320px}.mcsprite-diorite_slab { background-position: -768px -320px}.mcsprite-diorite_stairs { background-position: -800px -320px}.mcsprite-diorite_wall { background-position: -832px -320px}.mcsprite-dirt { background-position: -864px -320px}.mcsprite-dirt_path { background-position: -896px -320px}.mcsprite-dispenser { background-position: -928px -320px}.mcsprite-dolphin_spawn_egg { background-position: -960px -320px}.mcsprite-donkey_spawn_egg { background-position: -992px -320px}.mcsprite-double_smooth_stone_slab { background-position: -1024px -320px}.mcsprite-dragon_egg { background-position: -1056px -320px}.mcsprite-dragon_head { background-position: -1088px -320px}.mcsprite-dragons_breath { background-position: -1120px -320px}.mcsprite-dried_kelp { background-position: -1152px -320px}.mcsprite-dried_kelp_block { background-position: -1184px -320px}.mcsprite-dripstone_block { background-position: -1216px -320px}.mcsprite-dropper { background-position: -1248px -320px}.mcsprite-drowned_spawn_egg { background-position: 0 -352px}.mcsprite-egg { background-position: -32px -352px}.mcsprite-elder_guardian_spawn_egg { background-position: -64px -352px}.mcsprite-elytra { background-position: -96px -352px}.mcsprite-emerald { background-position: -128px -352px}.mcsprite-emerald_ore { background-position: -160px -352px}.mcsprite-empty_locator_map { background-position: -192px -352px}.mcsprite-empty_map { background-position: -224px -352px}.mcsprite-enchanted_apple { background-position: -256px -352px}.mcsprite-enchanted_book { background-position: -288px -352px}.mcsprite-enchanted_golden_apple { background-position: -320px -352px}.mcsprite-enchanting_table { background-position: -352px -352px}.mcsprite-enchantment_table { background-position: -384px -352px}.mcsprite-end_crystal { background-position: -416px -352px}.mcsprite-end_gateway { background-position: -448px -352px}.mcsprite-end_portal { background-position: -480px -352px}.mcsprite-end_portal_frame { background-position: -512px -352px}.mcsprite-end_rod { background-position: -544px -352px}.mcsprite-end_stone { background-position: -576px -352px}.mcsprite-end_stone_brick_slab { background-position: -608px -352px}.mcsprite-end_stone_brick_stairs { background-position: -640px -352px}.mcsprite-end_stone_brick_wall { background-position: -672px -352px}.mcsprite-end_stone_bricks { background-position: -704px -352px}.mcsprite-ender_chest { background-position: -736px -352px}.mcsprite-ender_pearl { background-position: -768px -352px}.mcsprite-enderman_spawn_egg { background-position: -800px -352px}.mcsprite-endermite_spawn_egg { background-position: -832px -352px}.mcsprite-evoker_spawn_egg { background-position: -864px -352px}.mcsprite-exposed_copper { background-position: -896px -352px}.mcsprite-exposed_copper_block { background-position: -928px -352px}.mcsprite-exposed_cut_copper { background-position: -960px -352px}.mcsprite-exposed_cut_copper_block { background-position: -992px -352px}.mcsprite-exposed_cut_copper_slab { background-position: -1024px -352px}.mcsprite-exposed_cut_copper_stairs { background-position: -1056px -352px}.mcsprite-eye_of_ender { background-position: -1088px -352px}.mcsprite-farmland { background-position: -1120px -352px}.mcsprite-feather { background-position: -1152px -352px}.mcsprite-fermented_spider_eye { background-position: -1184px -352px}.mcsprite-fern { background-position: -1216px -352px}.mcsprite-filled_bundle { background-position: -1248px -352px}.mcsprite-fire_charge { background-position: 0 -384px}.mcsprite-fire_coral { background-position: -32px -384px}.mcsprite-fire_coral_block { background-position: -64px -384px}.mcsprite-fire_coral_fan { background-position: -96px -384px}.mcsprite-firework_loaded_crossbow { background-position: -128px -384px}.mcsprite-firework_rocket { background-position: -160px -384px}.mcsprite-firework_star { background-position: -192px -384px}.mcsprite-fishing_rod { background-position: -224px -384px}.mcsprite-fletching_table { background-position: -256px -384px}.mcsprite-flint { background-position: -288px -384px}.mcsprite-flint_and_steel { background-position: -320px -384px}.mcsprite-flower_pot { background-position: -352px -384px}.mcsprite-flowering_azalea { background-position: -384px -384px}.mcsprite-flowering_azalea_leaves { background-position: -416px -384px}.mcsprite-flowing_lava { background-position: -448px -384px}.mcsprite-flowing_water { background-position: -480px -384px}.mcsprite-fox_spawn_egg { background-position: -512px -384px}.mcsprite-frosted_ice { background-position: -544px -384px}.mcsprite-furnace { background-position: -576px -384px}.mcsprite-ghast_spawn_egg { background-position: -608px -384px}.mcsprite-ghast_tear { background-position: -640px -384px}.mcsprite-gilded_blackstone { background-position: -672px -384px}.mcsprite-glass { background-position: -704px -384px}.mcsprite-glass_bottle { background-position: -736px -384px}.mcsprite-glass_pane { background-position: -768px -384px}.mcsprite-glistering_melon { background-position: -800px -384px}.mcsprite-glistering_melon_slice { background-position: -832px -384px}.mcsprite-glow_berries { background-position: -864px -384px}.mcsprite-glow_ink_sac { background-position: -896px -384px}.mcsprite-glow_item_frame { background-position: -928px -384px}.mcsprite-glow_lichen { background-position: -960px -384px}.mcsprite-glow_squid_spawn_egg { background-position: -992px -384px}.mcsprite-glowstone { background-position: -1024px -384px}.mcsprite-glowstone_dust { background-position: -1056px -384px}.mcsprite-goat_horn { background-position: -1088px -384px}.mcsprite-goat_spawn_egg { background-position: -1120px -384px}.mcsprite-gold_ingot { background-position: -1152px -384px}.mcsprite-gold_nugget { background-position: -1184px -384px}.mcsprite-gold_ore { background-position: -1216px -384px}.mcsprite-golden_apple { background-position: -1248px -384px}.mcsprite-golden_axe { background-position: 0 -416px}.mcsprite-golden_boots { background-position: -32px -416px}.mcsprite-golden_carrot { background-position: -64px -416px}.mcsprite-golden_chestplate { background-position: -96px -416px}.mcsprite-golden_helmet { background-position: -128px -416px}.mcsprite-golden_hoe { background-position: -160px -416px}.mcsprite-golden_horse_armor { background-position: -192px -416px}.mcsprite-golden_leggings { background-position: -224px -416px}.mcsprite-golden_pickaxe { background-position: -256px -416px}.mcsprite-golden_shovel { background-position: -288px -416px}.mcsprite-golden_sword { background-position: -320px -416px}.mcsprite-granite { background-position: -352px -416px}.mcsprite-granite_slab { background-position: -384px -416px}.mcsprite-granite_stairs { background-position: -416px -416px}.mcsprite-granite_wall { background-position: -448px -416px}.mcsprite-grass { background-position: -480px -416px}.mcsprite-grass_block { background-position: -512px -416px}.mcsprite-grass_path { background-position: -544px -416px}.mcsprite-gravel { background-position: -576px -416px}.mcsprite-gray_banner { background-position: -608px -416px}.mcsprite-gray_bed { background-position: -640px -416px}.mcsprite-gray_bed_lce { background-position: -672px -416px}.mcsprite-gray_candle { background-position: -704px -416px}.mcsprite-gray_carpet { background-position: -736px -416px}.mcsprite-gray_concrete { background-position: -768px -416px}.mcsprite-gray_concrete_powder { background-position: -800px -416px}.mcsprite-gray_dye { background-position: -832px -416px}.mcsprite-gray_firework_star { background-position: -864px -416px}.mcsprite-gray_glazed_terracotta { background-position: -896px -416px}.mcsprite-gray_shield { background-position: -928px -416px}.mcsprite-gray_shulker_box { background-position: -960px -416px}.mcsprite-gray_stained_glass { background-position: -992px -416px}.mcsprite-gray_stained_glass_pane { background-position: -1024px -416px}.mcsprite-gray_terracotta { background-position: -1056px -416px}.mcsprite-gray_wool { background-position: -1088px -416px}.mcsprite-green_banner { background-position: -1120px -416px}.mcsprite-green_bed { background-position: -1152px -416px}.mcsprite-green_bed_lce { background-position: -1184px -416px}.mcsprite-green_candle { background-position: -1216px -416px}.mcsprite-green_carpet { background-position: -1248px -416px}.mcsprite-green_concrete { background-position: 0 -448px}.mcsprite-green_concrete_powder { background-position: -32px -448px}.mcsprite-green_dye { background-position: -64px -448px}.mcsprite-green_firework_star { background-position: -96px -448px}.mcsprite-green_glazed_terracotta { background-position: -128px -448px}.mcsprite-green_shield { background-position: -160px -448px}.mcsprite-green_shulker_box { background-position: -192px -448px}.mcsprite-green_stained_glass { background-position: -224px -448px}.mcsprite-green_stained_glass_pane { background-position: -256px -448px}.mcsprite-green_terracotta { background-position: -288px -448px}.mcsprite-green_wool { background-position: -320px -448px}.mcsprite-grindstone { background-position: -352px -448px}.mcsprite-guardian_spawn_egg { background-position: -384px -448px}.mcsprite-gunpowder { background-position: -416px -448px}.mcsprite-half_filled_bundle { background-position: -448px -448px}.mcsprite-hanging_roots { background-position: -480px -448px}.mcsprite-hay_bale { background-position: -512px -448px}.mcsprite-head { background-position: -544px -448px}.mcsprite-heart_of_the_sea { background-position: -576px -448px}.mcsprite-heavy_weighted_pressure_plate { background-position: -608px -448px}.mcsprite-hoglin_spawn_egg { background-position: -640px -448px}.mcsprite-honey_block { background-position: -672px -448px}.mcsprite-honey_bottle { background-position: -704px -448px}.mcsprite-honeycomb { background-position: -736px -448px}.mcsprite-honeycomb_block { background-position: -768px -448px}.mcsprite-hopper { background-position: -800px -448px}.mcsprite-horn_coral { background-position: -832px -448px}.mcsprite-horn_coral_block { background-position: -864px -448px}.mcsprite-horn_coral_fan { background-position: -896px -448px}.mcsprite-horse_spawn_egg { background-position: -928px -448px}.mcsprite-husk_spawn_egg { background-position: -960px -448px}.mcsprite-ice { background-position: -992px -448px}.mcsprite-infested_chiseled_stone_bricks { background-position: -1024px -448px}.mcsprite-infested_cobblestone { background-position: -1056px -448px}.mcsprite-infested_cracked_stone_bricks { background-position: -1088px -448px}.mcsprite-infested_deepslate { background-position: -1120px -448px}.mcsprite-infested_mossy_stone_bricks { background-position: -1152px -448px}.mcsprite-infested_stone { background-position: -1184px -448px}.mcsprite-infested_stone_bricks { background-position: -1216px -448px}.mcsprite-ink_sac { background-position: -1248px -448px}.mcsprite-inverted_daylight_detector { background-position: 0 -480px}.mcsprite-inverted_daylight_sensor { background-position: -32px -480px}.mcsprite-invisible_bedrock { background-position: -64px -480px}.mcsprite-iron_axe { background-position: -96px -480px}.mcsprite-iron_bars { background-position: -128px -480px}.mcsprite-iron_boots { background-position: -160px -480px}.mcsprite-iron_chestplate { background-position: -192px -480px}.mcsprite-iron_door { background-position: -224px -480px}.mcsprite-iron_helmet { background-position: -256px -480px}.mcsprite-iron_hoe { background-position: -288px -480px}.mcsprite-iron_horse_armor { background-position: -320px -480px}.mcsprite-iron_ingot { background-position: -352px -480px}.mcsprite-iron_leggings { background-position: -384px -480px}.mcsprite-iron_nugget { background-position: -416px -480px}.mcsprite-iron_ore { background-position: -448px -480px}.mcsprite-iron_pickaxe { background-position: -480px -480px}.mcsprite-iron_shovel { background-position: -512px -480px}.mcsprite-iron_sword { background-position: -544px -480px}.mcsprite-iron_trapdoor { background-position: -576px -480px}.mcsprite-item_frame { background-position: -608px -480px}.mcsprite-jack_olantern { background-position: -640px -480px}.mcsprite-jigsaw { background-position: -672px -480px}.mcsprite-jigsaw_block { background-position: -704px -480px}.mcsprite-jukebox { background-position: -736px -480px}.mcsprite-jungle_boat { background-position: -768px -480px}.mcsprite-jungle_button { background-position: -800px -480px}.mcsprite-jungle_door { background-position: -832px -480px}.mcsprite-jungle_fence { background-position: -864px -480px}.mcsprite-jungle_fence_gate { background-position: -896px -480px}.mcsprite-jungle_leaves { background-position: -928px -480px}.mcsprite-jungle_log { background-position: -960px -480px}.mcsprite-jungle_planks { background-position: -992px -480px}.mcsprite-jungle_pressure_plate { background-position: -1024px -480px}.mcsprite-jungle_sapling { background-position: -1056px -480px}.mcsprite-jungle_sign { background-position: -1088px -480px}.mcsprite-jungle_slab { background-position: -1120px -480px}.mcsprite-jungle_stairs { background-position: -1152px -480px}.mcsprite-jungle_trapdoor { background-position: -1184px -480px}.mcsprite-jungle_wood { background-position: -1216px -480px}.mcsprite-jungle_wood_button { background-position: -1248px -480px}.mcsprite-jungle_wood_door { background-position: 0 -512px}.mcsprite-jungle_wood_fence { background-position: -32px -512px}.mcsprite-jungle_wood_fence_gate { background-position: -64px -512px}.mcsprite-jungle_wood_planks { background-position: -96px -512px}.mcsprite-jungle_wood_pressure_plate { background-position: -128px -512px}.mcsprite-jungle_wood_sign { background-position: -160px -512px}.mcsprite-jungle_wood_slab { background-position: -192px -512px}.mcsprite-jungle_wood_stairs { background-position: -224px -512px}.mcsprite-jungle_wood_trapdoor { background-position: -256px -512px}.mcsprite-kelp { background-position: -288px -512px}.mcsprite-knowledge_book { background-position: -320px -512px}.mcsprite-ladder { background-position: -352px -512px}.mcsprite-lantern { background-position: -384px -512px}.mcsprite-lapis_lazuli { background-position: -416px -512px}.mcsprite-lapis_lazuli_block { background-position: -448px -512px}.mcsprite-lapis_lazuli_ore { background-position: -480px -512px}.mcsprite-large_amethyst_bud { background-position: -512px -512px}.mcsprite-large_fern { background-position: -544px -512px}.mcsprite-lava { background-position: -576px -512px}.mcsprite-lava_bucket { background-position: -608px -512px}.mcsprite-lead { background-position: -640px -512px}.mcsprite-leather { background-position: -672px -512px}.mcsprite-leather_boots { background-position: -704px -512px}.mcsprite-leather_boots_black { background-position: -736px -512px}.mcsprite-leather_boots_blue { background-position: -768px -512px}.mcsprite-leather_boots_cyan { background-position: -800px -512px}.mcsprite-leather_boots_gray { background-position: -832px -512px}.mcsprite-leather_boots_green { background-position: -864px -512px}.mcsprite-leather_boots_light_blue { background-position: -896px -512px}.mcsprite-leather_boots_light_gray { background-position: -928px -512px}.mcsprite-leather_boots_lime { background-position: -960px -512px}.mcsprite-leather_boots_magenta { background-position: -992px -512px}.mcsprite-leather_boots_orange { background-position: -1024px -512px}.mcsprite-leather_boots_pink { background-position: -1056px -512px}.mcsprite-leather_boots_purple { background-position: -1088px -512px}.mcsprite-leather_boots_red { background-position: -1120px -512px}.mcsprite-leather_boots_white { background-position: -1152px -512px}.mcsprite-leather_boots_yellow { background-position: -1184px -512px}.mcsprite-leather_cap { background-position: -1216px -512px}.mcsprite-leather_cap_black { background-position: -1248px -512px}.mcsprite-leather_cap_blue { background-position: 0 -544px}.mcsprite-leather_cap_cyan { background-position: -32px -544px}.mcsprite-leather_cap_gray { background-position: -64px -544px}.mcsprite-leather_cap_green { background-position: -96px -544px}.mcsprite-leather_cap_light_blue { background-position: -128px -544px}.mcsprite-leather_cap_light_gray { background-position: -160px -544px}.mcsprite-leather_cap_lime { background-position: -192px -544px}.mcsprite-leather_cap_magenta { background-position: -224px -544px}.mcsprite-leather_cap_orange { background-position: -256px -544px}.mcsprite-leather_cap_pink { background-position: -288px -544px}.mcsprite-leather_cap_purple { background-position: -320px -544px}.mcsprite-leather_cap_red { background-position: -352px -544px}.mcsprite-leather_cap_white { background-position: -384px -544px}.mcsprite-leather_cap_yellow { background-position: -416px -544px}.mcsprite-leather_horse_armor { background-position: -448px -544px}.mcsprite-leather_pants { background-position: -480px -544px}.mcsprite-leather_pants_black { background-position: -512px -544px}.mcsprite-leather_pants_blue { background-position: -544px -544px}.mcsprite-leather_pants_cyan { background-position: -576px -544px}.mcsprite-leather_pants_gray { background-position: -608px -544px}.mcsprite-leather_pants_green { background-position: -640px -544px}.mcsprite-leather_pants_light_blue { background-position: -672px -544px}.mcsprite-leather_pants_light_gray { background-position: -704px -544px}.mcsprite-leather_pants_lime { background-position: -736px -544px}.mcsprite-leather_pants_magenta { background-position: -768px -544px}.mcsprite-leather_pants_orange { background-position: -800px -544px}.mcsprite-leather_pants_pink { background-position: -832px -544px}.mcsprite-leather_pants_purple { background-position: -864px -544px}.mcsprite-leather_pants_red { background-position: -896px -544px}.mcsprite-leather_pants_white { background-position: -928px -544px}.mcsprite-leather_pants_yellow { background-position: -960px -544px}.mcsprite-leather_tunic { background-position: -992px -544px}.mcsprite-leather_tunic_black { background-position: -1024px -544px}.mcsprite-leather_tunic_blue { background-position: -1056px -544px}.mcsprite-leather_tunic_cyan { background-position: -1088px -544px}.mcsprite-leather_tunic_gray { background-position: -1120px -544px}.mcsprite-leather_tunic_green { background-position: -1152px -544px}.mcsprite-leather_tunic_light_blue { background-position: -1184px -544px}.mcsprite-leather_tunic_light_gray { background-position: -1216px -544px}.mcsprite-leather_tunic_lime { background-position: -1248px -544px}.mcsprite-leather_tunic_magenta { background-position: 0 -576px}.mcsprite-leather_tunic_orange { background-position: -32px -576px}.mcsprite-leather_tunic_pink { background-position: -64px -576px}.mcsprite-leather_tunic_purple { background-position: -96px -576px}.mcsprite-leather_tunic_red { background-position: -128px -576px}.mcsprite-leather_tunic_white { background-position: -160px -576px}.mcsprite-leather_tunic_yellow { background-position: -192px -576px}.mcsprite-lectern { background-position: -224px -576px}.mcsprite-lever { background-position: -256px -576px}.mcsprite-light_blue_banner { background-position: -288px -576px}.mcsprite-light_blue_bed { background-position: -320px -576px}.mcsprite-light_blue_bed_lce { background-position: -352px -576px}.mcsprite-light_blue_candle { background-position: -384px -576px}.mcsprite-light_blue_carpet { background-position: -416px -576px}.mcsprite-light_blue_concrete { background-position: -448px -576px}.mcsprite-light_blue_concrete_powder { background-position: -480px -576px}.mcsprite-light_blue_dye { background-position: -512px -576px}.mcsprite-light_blue_firework_star { background-position: -544px -576px}.mcsprite-light_blue_glazed_terracotta { background-position: -576px -576px}.mcsprite-light_blue_shield { background-position: -608px -576px}.mcsprite-light_blue_shulker_box { background-position: -640px -576px}.mcsprite-light_blue_stained_glass { background-position: -672px -576px}.mcsprite-light_blue_stained_glass_pane { background-position: -704px -576px}.mcsprite-light_blue_terracotta { background-position: -736px -576px}.mcsprite-light_blue_wool { background-position: -768px -576px}.mcsprite-light_gray_banner { background-position: -800px -576px}.mcsprite-light_gray_bed { background-position: -832px -576px}.mcsprite-light_gray_bed_lce { background-position: -864px -576px}.mcsprite-light_gray_candle { background-position: -896px -576px}.mcsprite-light_gray_carpet { background-position: -928px -576px}.mcsprite-light_gray_concrete { background-position: -960px -576px}.mcsprite-light_gray_concrete_powder { background-position: -992px -576px}.mcsprite-light_gray_dye { background-position: -1024px -576px}.mcsprite-light_gray_firework_star { background-position: -1056px -576px}.mcsprite-light_gray_glazed_terracotta { background-position: -1088px -576px}.mcsprite-light_gray_shield { background-position: -1120px -576px}.mcsprite-light_gray_shulker_box { background-position: -1152px -576px}.mcsprite-light_gray_stained_glass { background-position: -1184px -576px}.mcsprite-light_gray_stained_glass_pane { background-position: -1216px -576px}.mcsprite-light_gray_terracotta { background-position: -1248px -576px}.mcsprite-light_gray_wool { background-position: 0 -608px}.mcsprite-light_negative { background-position: -32px -608px}.mcsprite-light_weighted_pressure_plate { background-position: -64px -608px}.mcsprite-lightning_rod { background-position: -96px -608px}.mcsprite-lilac { background-position: -128px -608px}.mcsprite-lily_of_the_valley { background-position: -160px -608px}.mcsprite-lily_pad { background-position: -192px -608px}.mcsprite-lime_banner { background-position: -224px -608px}.mcsprite-lime_bed { background-position: -256px -608px}.mcsprite-lime_bed_lce { background-position: -288px -608px}.mcsprite-lime_candle { background-position: -320px -608px}.mcsprite-lime_carpet { background-position: -352px -608px}.mcsprite-lime_concrete { background-position: -384px -608px}.mcsprite-lime_concrete_powder { background-position: -416px -608px}.mcsprite-lime_dye { background-position: -448px -608px}.mcsprite-lime_firework_star { background-position: -480px -608px}.mcsprite-lime_glazed_terracotta { background-position: -512px -608px}.mcsprite-lime_shield { background-position: -544px -608px}.mcsprite-lime_shulker_box { background-position: -576px -608px}.mcsprite-lime_stained_glass { background-position: -608px -608px}.mcsprite-lime_stained_glass_pane { background-position: -640px -608px}.mcsprite-lime_terracotta { background-position: -672px -608px}.mcsprite-lime_wool { background-position: -704px -608px}.mcsprite-lingering_potion_of_decay { background-position: -736px -608px}.mcsprite-lingering_potion_of_fire_resistance { background-position: -768px -608px}.mcsprite-lingering_potion_of_harming { background-position: -800px -608px}.mcsprite-lingering_potion_of_healing { background-position: -832px -608px}.mcsprite-lingering_potion_of_invisibility { background-position: -864px -608px}.mcsprite-lingering_potion_of_leaping { background-position: -896px -608px}.mcsprite-lingering_potion_of_levitation { background-position: -928px -608px}.mcsprite-lingering_potion_of_luck { background-position: -960px -608px}.mcsprite-lingering_potion_of_night_vision { background-position: -992px -608px}.mcsprite-lingering_potion_of_poison { background-position: -1024px -608px}.mcsprite-lingering_potion_of_regeneration { background-position: -1056px -608px}.mcsprite-lingering_potion_of_slow_falling { background-position: -1088px -608px}.mcsprite-lingering_potion_of_slowness { background-position: -1120px -608px}.mcsprite-lingering_potion_of_strength { background-position: -1152px -608px}.mcsprite-lingering_potion_of_swiftness { background-position: -1184px -608px}.mcsprite-lingering_potion_of_the_turtle_master { background-position: -1216px -608px}.mcsprite-lingering_potion_of_water_breathing { background-position: -1248px -608px}.mcsprite-lingering_potion_of_weakness { background-position: 0 -640px}.mcsprite-lingering_water_bottle { background-position: -32px -640px}.mcsprite-llama_spawn_egg { background-position: -64px -640px}.mcsprite-locked_map { background-position: -96px -640px}.mcsprite-lodestone { background-position: -128px -640px}.mcsprite-loom { background-position: -160px -640px}.mcsprite-magenta_banner { background-position: -192px -640px}.mcsprite-magenta_bed { background-position: -224px -640px}.mcsprite-magenta_bed_lce { background-position: -256px -640px}.mcsprite-magenta_candle { background-position: -288px -640px}.mcsprite-magenta_carpet { background-position: -320px -640px}.mcsprite-magenta_concrete { background-position: -352px -640px}.mcsprite-magenta_concrete_powder { background-position: -384px -640px}.mcsprite-magenta_dye { background-position: -416px -640px}.mcsprite-magenta_firework_star { background-position: -448px -640px}.mcsprite-magenta_glazed_terracotta { background-position: -480px -640px}.mcsprite-magenta_shield { background-position: -512px -640px}.mcsprite-magenta_shulker_box { background-position: -544px -640px}.mcsprite-magenta_stained_glass { background-position: -576px -640px}.mcsprite-magenta_stained_glass_pane { background-position: -608px -640px}.mcsprite-magenta_terracotta { background-position: -640px -640px}.mcsprite-magenta_wool { background-position: -672px -640px}.mcsprite-magma_cream { background-position: -704px -640px}.mcsprite-magma_cube_spawn_egg { background-position: -736px -640px}.mcsprite-map { background-position: -768px -640px}.mcsprite-medium_amethyst_bud { background-position: -800px -640px}.mcsprite-melon { background-position: -832px -640px}.mcsprite-melon_seeds { background-position: -864px -640px}.mcsprite-melon_slice { background-position: -896px -640px}.mcsprite-mhf_alex { background-position: -928px -640px}.mcsprite-mhf_arrowdown { background-position: -960px -640px}.mcsprite-mhf_arrowleft { background-position: -992px -640px}.mcsprite-mhf_arrowright { background-position: -1024px -640px}.mcsprite-mhf_arrowup { background-position: -1056px -640px}.mcsprite-mhf_blaze { background-position: -1088px -640px}.mcsprite-mhf_cactus { background-position: -1120px -640px}.mcsprite-mhf_cake { background-position: -1152px -640px}.mcsprite-mhf_cavespider { background-position: -1184px -640px}.mcsprite-mhf_chest { background-position: -1216px -640px}.mcsprite-mhf_chicken { background-position: -1248px -640px}.mcsprite-mhf_coconutb { background-position: 0 -672px}.mcsprite-mhf_coconutg { background-position: -32px -672px}.mcsprite-mhf_cow { background-position: -64px -672px}.mcsprite-mhf_creeper { background-position: -96px -672px}.mcsprite-mhf_enderman { background-position: -128px -672px}.mcsprite-mhf_exclamation { background-position: -160px -672px}.mcsprite-mhf_ghast { background-position: -192px -672px}.mcsprite-mhf_golem { background-position: -224px -672px}.mcsprite-mhf_herobrine { background-position: -256px -672px}.mcsprite-mhf_lavaslime { background-position: -288px -672px}.mcsprite-mhf_melon { background-position: -320px -672px}.mcsprite-mhf_mushroomcow { background-position: -352px -672px}.mcsprite-mhf_oaklog { background-position: -384px -672px}.mcsprite-mhf_ocelot { background-position: -416px -672px}.mcsprite-mhf_pig { background-position: -448px -672px}.mcsprite-mhf_pigzombie { background-position: -480px -672px}.mcsprite-mhf_present1 { background-position: -512px -672px}.mcsprite-mhf_present2 { background-position: -544px -672px}.mcsprite-mhf_pumpkin { background-position: -576px -672px}.mcsprite-mhf_question { background-position: -608px -672px}.mcsprite-mhf_sheep { background-position: -640px -672px}.mcsprite-mhf_skeleton { background-position: -672px -672px}.mcsprite-mhf_slime { background-position: -704px -672px}.mcsprite-mhf_spider { background-position: -736px -672px}.mcsprite-mhf_squid { background-position: -768px -672px}.mcsprite-mhf_steve { background-position: -800px -672px}.mcsprite-mhf_tnt { background-position: -832px -672px}.mcsprite-mhf_tnt2 { background-position: -864px -672px}.mcsprite-mhf_villager { background-position: -896px -672px}.mcsprite-mhf_wskeleton { background-position: -928px -672px}.mcsprite-mhf_zombie { background-position: -960px -672px}.mcsprite-milk_bucket { background-position: -992px -672px}.mcsprite-minecart { background-position: -1024px -672px}.mcsprite-minecart_with_chest { background-position: -1056px -672px}.mcsprite-minecart_with_command_block { background-position: -1088px -672px}.mcsprite-minecart_with_furnace { background-position: -1120px -672px}.mcsprite-minecart_with_hopper { background-position: -1152px -672px}.mcsprite-minecart_with_tnt { background-position: -1184px -672px}.mcsprite-monster_spawner { background-position: -1216px -672px}.mcsprite-mooshroom_spawn_egg { background-position: -1248px -672px}.mcsprite-moss_block { background-position: 0 -704px}.mcsprite-moss_carpet { background-position: -32px -704px}.mcsprite-moss_stone { background-position: -64px -704px}.mcsprite-mossy_cobblestone { background-position: -96px -704px}.mcsprite-mossy_cobblestone_slab { background-position: -128px -704px}.mcsprite-mossy_cobblestone_stairs { background-position: -160px -704px}.mcsprite-mossy_cobblestone_wall { background-position: -192px -704px}.mcsprite-mossy_stone_brick_slab { background-position: -224px -704px}.mcsprite-mossy_stone_brick_stairs { background-position: -256px -704px}.mcsprite-mossy_stone_brick_wall { background-position: -288px -704px}.mcsprite-mossy_stone_bricks { background-position: -320px -704px}.mcsprite-mossy_stone_bricks_monster_egg { background-position: -352px -704px}.mcsprite-mule_spawn_egg { background-position: -384px -704px}.mcsprite-mundane_lingering_potion { background-position: -416px -704px}.mcsprite-mundane_potion { background-position: -448px -704px}.mcsprite-mundane_splash_potion { background-position: -480px -704px}.mcsprite-mushroom_stem { background-position: -512px -704px}.mcsprite-mushroom_stew { background-position: -544px -704px}.mcsprite-music_disc_11 { background-position: -576px -704px}.mcsprite-music_disc_13 { background-position: -608px -704px}.mcsprite-music_disc_blocks { background-position: -640px -704px}.mcsprite-music_disc_cat { background-position: -672px -704px}.mcsprite-music_disc_chirp { background-position: -704px -704px}.mcsprite-music_disc_far { background-position: -736px -704px}.mcsprite-music_disc_mall { background-position: -768px -704px}.mcsprite-music_disc_mellohi { background-position: -800px -704px}.mcsprite-music_disc_pigstep { background-position: -832px -704px}.mcsprite-music_disc_stal { background-position: -864px -704px}.mcsprite-music_disc_strad { background-position: -896px -704px}.mcsprite-music_disc_wait { background-position: -928px -704px}.mcsprite-music_disc_ward { background-position: -960px -704px}.mcsprite-mycelium { background-position: -992px -704px}.mcsprite-name_tag { background-position: -1024px -704px}.mcsprite-nautilus_shell { background-position: -1056px -704px}.mcsprite-nether_brick { background-position: -1088px -704px}.mcsprite-nether_brick_block { background-position: -1120px -704px}.mcsprite-nether_brick_fence { background-position: -1152px -704px}.mcsprite-nether_brick_slab { background-position: -1184px -704px}.mcsprite-nether_brick_stairs { background-position: -1216px -704px}.mcsprite-nether_brick_wall { background-position: -1248px -704px}.mcsprite-nether_bricks { background-position: 0 -736px}.mcsprite-nether_gold_ore { background-position: -32px -736px}.mcsprite-nether_quartz { background-position: -64px -736px}.mcsprite-nether_quartz_ore { background-position: -96px -736px}.mcsprite-nether_sprouts { background-position: -128px -736px}.mcsprite-nether_sprouts_old { background-position: -160px -736px}.mcsprite-nether_star { background-position: -192px -736px}.mcsprite-nether_wart { background-position: -224px -736px}.mcsprite-nether_wart_block { background-position: -256px -736px}.mcsprite-netherite_axe { background-position: -288px -736px}.mcsprite-netherite_boots { background-position: -320px -736px}.mcsprite-netherite_chestplate { background-position: -352px -736px}.mcsprite-netherite_helmet { background-position: -384px -736px}.mcsprite-netherite_hoe { background-position: -416px -736px}.mcsprite-netherite_ingot { background-position: -448px -736px}.mcsprite-netherite_leggings { background-position: -480px -736px}.mcsprite-netherite_pickaxe { background-position: -512px -736px}.mcsprite-netherite_scrap { background-position: -544px -736px}.mcsprite-netherite_shovel { background-position: -576px -736px}.mcsprite-netherite_sword { background-position: -608px -736px}.mcsprite-netherrack { background-position: -640px -736px}.mcsprite-note_block { background-position: -672px -736px}.mcsprite-oak_boat { background-position: -704px -736px}.mcsprite-oak_button { background-position: -736px -736px}.mcsprite-oak_door { background-position: -768px -736px}.mcsprite-oak_fence { background-position: -800px -736px}.mcsprite-oak_fence_gate { background-position: -832px -736px}.mcsprite-oak_leaves { background-position: -864px -736px}.mcsprite-oak_log { background-position: -896px -736px}.mcsprite-oak_planks { background-position: -928px -736px}.mcsprite-oak_pressure_plate { background-position: -960px -736px}.mcsprite-oak_sapling { background-position: -992px -736px}.mcsprite-oak_sign { background-position: -1024px -736px}.mcsprite-oak_slab { background-position: -1056px -736px}.mcsprite-oak_stairs { background-position: -1088px -736px}.mcsprite-oak_trapdoor { background-position: -1120px -736px}.mcsprite-oak_wood { background-position: -1152px -736px}.mcsprite-oak_wood_button { background-position: -1184px -736px}.mcsprite-oak_wood_door { background-position: -1216px -736px}.mcsprite-oak_wood_fence { background-position: -1248px -736px}.mcsprite-oak_wood_fence_gate { background-position: 0 -768px}.mcsprite-oak_wood_planks { background-position: -32px -768px}.mcsprite-oak_wood_pressure_plate { background-position: -64px -768px}.mcsprite-oak_wood_sign { background-position: -96px -768px}.mcsprite-oak_wood_slab { background-position: -128px -768px}.mcsprite-oak_wood_stairs { background-position: -160px -768px}.mcsprite-oak_wood_trapdoor { background-position: -192px -768px}.mcsprite-observer { background-position: -224px -768px}.mcsprite-obsidian { background-position: -256px -768px}.mcsprite-ocean_explorer_map { background-position: -288px -768px}.mcsprite-ocelot_spawn_egg { background-position: -320px -768px}.mcsprite-ominous_shield { background-position: -352px -768px}.mcsprite-orange_banner { background-position: -384px -768px}.mcsprite-orange_bed { background-position: -416px -768px}.mcsprite-orange_bed_lce { background-position: -448px -768px}.mcsprite-orange_candle { background-position: -480px -768px}.mcsprite-orange_carpet { background-position: -512px -768px}.mcsprite-orange_concrete { background-position: -544px -768px}.mcsprite-orange_concrete_powder { background-position: -576px -768px}.mcsprite-orange_dye { background-position: -608px -768px}.mcsprite-orange_firework_star { background-position: -640px -768px}.mcsprite-orange_glazed_terracotta { background-position: -672px -768px}.mcsprite-orange_shield { background-position: -704px -768px}.mcsprite-orange_shulker_box { background-position: -736px -768px}.mcsprite-orange_stained_glass { background-position: -768px -768px}.mcsprite-orange_stained_glass_pane { background-position: -800px -768px}.mcsprite-orange_terracotta { background-position: -832px -768px}.mcsprite-orange_tulip { background-position: -864px -768px}.mcsprite-orange_wool { background-position: -896px -768px}.mcsprite-oxeye_daisy { background-position: -928px -768px}.mcsprite-oxidized_copper { background-position: -960px -768px}.mcsprite-oxidized_copper_block { background-position: -992px -768px}.mcsprite-oxidized_cut_copper { background-position: -1024px -768px}.mcsprite-oxidized_cut_copper_block { background-position: -1056px -768px}.mcsprite-oxidized_cut_copper_slab { background-position: -1088px -768px}.mcsprite-oxidized_cut_copper_stairs { background-position: -1120px -768px}.mcsprite-packed_ice { background-position: -1152px -768px}.mcsprite-painting { background-position: -1184px -768px}.mcsprite-panda_spawn_egg { background-position: -1216px -768px}.mcsprite-paper { background-position: -1248px -768px}.mcsprite-parrot_spawn_egg { background-position: 0 -800px}.mcsprite-peony { background-position: -32px -800px}.mcsprite-petrified_oak_slab { background-position: -64px -800px}.mcsprite-phantom_membrane { background-position: -96px -800px}.mcsprite-phantom_spawn_egg { background-position: -128px -800px}.mcsprite-pig_spawn_egg { background-position: -160px -800px}.mcsprite-piglin_brute_spawn_egg { background-position: -192px -800px}.mcsprite-piglin_spawn_egg { background-position: -224px -800px}.mcsprite-pillager_spawn_egg { background-position: -256px -800px}.mcsprite-pink_banner { background-position: -288px -800px}.mcsprite-pink_bed { background-position: -320px -800px}.mcsprite-pink_bed_lce { background-position: -352px -800px}.mcsprite-pink_candle { background-position: -384px -800px}.mcsprite-pink_carpet { background-position: -416px -800px}.mcsprite-pink_concrete { background-position: -448px -800px}.mcsprite-pink_concrete_powder { background-position: -480px -800px}.mcsprite-pink_dye { background-position: -512px -800px}.mcsprite-pink_firework_star { background-position: -544px -800px}.mcsprite-pink_glazed_terracotta { background-position: -576px -800px}.mcsprite-pink_shield { background-position: -608px -800px}.mcsprite-pink_shulker_box { background-position: -640px -800px}.mcsprite-pink_stained_glass { background-position: -672px -800px}.mcsprite-pink_stained_glass_pane { background-position: -704px -800px}.mcsprite-pink_terracotta { background-position: -736px -800px}.mcsprite-pink_tulip { background-position: -768px -800px}.mcsprite-pink_wool { background-position: -800px -800px}.mcsprite-piston { background-position: -832px -800px}.mcsprite-player_head { background-position: -864px -800px}.mcsprite-podzol { background-position: -896px -800px}.mcsprite-pointed_dripstone { background-position: -928px -800px}.mcsprite-poisonous_potato { background-position: -960px -800px}.mcsprite-polar_bear_spawn_egg { background-position: -992px -800px}.mcsprite-polished_andesite { background-position: -1024px -800px}.mcsprite-polished_andesite_slab { background-position: -1056px -800px}.mcsprite-polished_andesite_stairs { background-position: -1088px -800px}.mcsprite-polished_basalt { background-position: -1120px -800px}.mcsprite-polished_blackstone { background-position: -1152px -800px}.mcsprite-polished_blackstone_brick_slab { background-position: -1184px -800px}.mcsprite-polished_blackstone_brick_stairs { background-position: -1216px -800px}.mcsprite-polished_blackstone_brick_wall { background-position: -1248px -800px}.mcsprite-polished_blackstone_bricks { background-position: 0 -832px}.mcsprite-polished_blackstone_button { background-position: -32px -832px}.mcsprite-polished_blackstone_pressure_plate { background-position: -64px -832px}.mcsprite-polished_blackstone_slab { background-position: -96px -832px}.mcsprite-polished_blackstone_stairs { background-position: -128px -832px}.mcsprite-polished_blackstone_wall { background-position: -160px -832px}.mcsprite-polished_deepslate { background-position: -192px -832px}.mcsprite-polished_deepslate_slab { background-position: -224px -832px}.mcsprite-polished_deepslate_stairs { background-position: -256px -832px}.mcsprite-polished_deepslate_wall { background-position: -288px -832px}.mcsprite-polished_diorite { background-position: -320px -832px}.mcsprite-polished_diorite_slab { background-position: -352px -832px}.mcsprite-polished_diorite_stairs { background-position: -384px -832px}.mcsprite-polished_granite { background-position: -416px -832px}.mcsprite-polished_granite_slab { background-position: -448px -832px}.mcsprite-polished_granite_stairs { background-position: -480px -832px}.mcsprite-popped_chorus_fruit { background-position: -512px -832px}.mcsprite-poppy { background-position: -544px -832px}.mcsprite-portal { background-position: -576px -832px}.mcsprite-potato { background-position: -608px -832px}.mcsprite-potion_of_decay { background-position: -640px -832px}.mcsprite-potion_of_fire_resistance { background-position: -672px -832px}.mcsprite-potion_of_harming { background-position: -704px -832px}.mcsprite-potion_of_healing { background-position: -736px -832px}.mcsprite-potion_of_invisibility { background-position: -768px -832px}.mcsprite-potion_of_leaping { background-position: -800px -832px}.mcsprite-potion_of_levitation { background-position: -832px -832px}.mcsprite-potion_of_luck { background-position: -864px -832px}.mcsprite-potion_of_night_vision { background-position: -896px -832px}.mcsprite-potion_of_poison { background-position: -928px -832px}.mcsprite-potion_of_regeneration { background-position: -960px -832px}.mcsprite-potion_of_slow_falling { background-position: -992px -832px}.mcsprite-potion_of_slowness { background-position: -1024px -832px}.mcsprite-potion_of_strength { background-position: -1056px -832px}.mcsprite-potion_of_swiftness { background-position: -1088px -832px}.mcsprite-potion_of_the_turtle_master { background-position: -1120px -832px}.mcsprite-potion_of_water_breathing { background-position: -1152px -832px}.mcsprite-potion_of_weakness { background-position: -1184px -832px}.mcsprite-powder_snow { background-position: -1216px -832px}.mcsprite-powder_snow_bucket { background-position: -1248px -832px}.mcsprite-powered_rail { background-position: 0 -864px}.mcsprite-prismarine { background-position: -32px -864px}.mcsprite-prismarine_brick_slab { background-position: -64px -864px}.mcsprite-prismarine_brick_stairs { background-position: -96px -864px}.mcsprite-prismarine_brick_stairs_old { background-position: -128px -864px}.mcsprite-prismarine_bricks { background-position: -160px -864px}.mcsprite-prismarine_bricks_slab { background-position: -192px -864px}.mcsprite-prismarine_crystals { background-position: -224px -864px}.mcsprite-prismarine_shard { background-position: -256px -864px}.mcsprite-prismarine_wall { background-position: -288px -864px}.mcsprite-pufferfish { background-position: -320px -864px}.mcsprite-pufferfish_spawn_egg { background-position: -352px -864px}.mcsprite-pumpkin { background-position: -384px -864px}.mcsprite-pumpkin_pie { background-position: -416px -864px}.mcsprite-pumpkin_seeds { background-position: -448px -864px}.mcsprite-purple_banner { background-position: -480px -864px}.mcsprite-purple_bed { background-position: -512px -864px}.mcsprite-purple_bed_lce { background-position: -544px -864px}.mcsprite-purple_candle { background-position: -576px -864px}.mcsprite-purple_carpet { background-position: -608px -864px}.mcsprite-purple_concrete { background-position: -640px -864px}.mcsprite-purple_concrete_powder { background-position: -672px -864px}.mcsprite-purple_dye { background-position: -704px -864px}.mcsprite-purple_firework_star { background-position: -736px -864px}.mcsprite-purple_glazed_terracotta { background-position: -768px -864px}.mcsprite-purple_shield { background-position: -800px -864px}.mcsprite-purple_shulker_box { background-position: -832px -864px}.mcsprite-purple_stained_glass { background-position: -864px -864px}.mcsprite-purple_stained_glass_pane { background-position: -896px -864px}.mcsprite-purple_terracotta { background-position: -928px -864px}.mcsprite-purple_wool { background-position: -960px -864px}.mcsprite-purpur_block { background-position: -992px -864px}.mcsprite-purpur_pillar { background-position: -1024px -864px}.mcsprite-purpur_slab { background-position: -1056px -864px}.mcsprite-purpur_stairs { background-position: -1088px -864px}.mcsprite-quartz_bricks { background-position: -1120px -864px}.mcsprite-quartz_pillar { background-position: -1152px -864px}.mcsprite-quartz_slab { background-position: -1184px -864px}.mcsprite-quartz_stairs { background-position: -1216px -864px}.mcsprite-rabbit_hide { background-position: -1248px -864px}.mcsprite-rabbit_spawn_egg { background-position: 0 -896px}.mcsprite-rabbit_stew { background-position: -32px -896px}.mcsprite-rabbits_foot { background-position: -64px -896px}.mcsprite-rail { background-position: -96px -896px}.mcsprite-ravager_spawn_egg { background-position: -128px -896px}.mcsprite-raw_beef { background-position: -160px -896px}.mcsprite-raw_chicken { background-position: -192px -896px}.mcsprite-raw_cod { background-position: -224px -896px}.mcsprite-raw_copper { background-position: -256px -896px}.mcsprite-raw_fish { background-position: -288px -896px}.mcsprite-raw_gold { background-position: -320px -896px}.mcsprite-raw_iron { background-position: -352px -896px}.mcsprite-raw_mutton { background-position: -384px -896px}.mcsprite-raw_porkchop { background-position: -416px -896px}.mcsprite-raw_rabbit { background-position: -448px -896px}.mcsprite-raw_salmon { background-position: -480px -896px}.mcsprite-red_banner { background-position: -512px -896px}.mcsprite-red_bed { background-position: -544px -896px}.mcsprite-red_bed_lce { background-position: -576px -896px}.mcsprite-red_candle { background-position: -608px -896px}.mcsprite-red_carpet { background-position: -640px -896px}.mcsprite-red_concrete { background-position: -672px -896px}.mcsprite-red_concrete_powder { background-position: -704px -896px}.mcsprite-red_dye { background-position: -736px -896px}.mcsprite-red_firework_star { background-position: -768px -896px}.mcsprite-red_glazed_terracotta { background-position: -800px -896px}.mcsprite-red_mushroom { background-position: -832px -896px}.mcsprite-red_mushroom_block { background-position: -864px -896px}.mcsprite-red_nether_brick_slab { background-position: -896px -896px}.mcsprite-red_nether_brick_stairs { background-position: -928px -896px}.mcsprite-red_nether_brick_wall { background-position: -960px -896px}.mcsprite-red_nether_bricks { background-position: -992px -896px}.mcsprite-red_sand { background-position: -1024px -896px}.mcsprite-red_sandstone { background-position: -1056px -896px}.mcsprite-red_sandstone_slab { background-position: -1088px -896px}.mcsprite-red_sandstone_stairs { background-position: -1120px -896px}.mcsprite-red_sandstone_wall { background-position: -1152px -896px}.mcsprite-red_shield { background-position: -1184px -896px}.mcsprite-red_shulker_box { background-position: -1216px -896px}.mcsprite-red_stained_glass { background-position: -1248px -896px}.mcsprite-red_stained_glass_pane { background-position: 0 -928px}.mcsprite-red_terracotta { background-position: -32px -928px}.mcsprite-red_tulip { background-position: -64px -928px}.mcsprite-red_wool { background-position: -96px -928px}.mcsprite-redstone { background-position: -128px -928px}.mcsprite-redstone_comparator { background-position: -160px -928px}.mcsprite-redstone_dust { background-position: -192px -928px}.mcsprite-redstone_lamp { background-position: -224px -928px}.mcsprite-redstone_ore { background-position: -256px -928px}.mcsprite-redstone_repeater { background-position: -288px -928px}.mcsprite-redstone_torch { background-position: -320px -928px}.mcsprite-respawn_anchor { background-position: -352px -928px}.mcsprite-rooted_dirt { background-position: -384px -928px}.mcsprite-rose_bush { background-position: -416px -928px}.mcsprite-rose_red { background-position: -448px -928px}.mcsprite-rotten_flesh { background-position: -480px -928px}.mcsprite-saddle { background-position: -512px -928px}.mcsprite-salmon_spawn_egg { background-position: -544px -928px}.mcsprite-sand { background-position: -576px -928px}.mcsprite-sandstone { background-position: -608px -928px}.mcsprite-sandstone_slab { background-position: -640px -928px}.mcsprite-sandstone_stairs { background-position: -672px -928px}.mcsprite-sandstone_wall { background-position: -704px -928px}.mcsprite-scaffolding { background-position: -736px -928px}.mcsprite-sculk_sensor { background-position: -768px -928px}.mcsprite-scute { background-position: -800px -928px}.mcsprite-sea_lantern { background-position: -832px -928px}.mcsprite-sea_pickle { background-position: -864px -928px}.mcsprite-seagrass { background-position: -896px -928px}.mcsprite-seeds { background-position: -928px -928px}.mcsprite-shears { background-position: -960px -928px}.mcsprite-sheep_spawn_egg { background-position: -992px -928px}.mcsprite-shield { background-position: -1024px -928px}.mcsprite-shroomlight { background-position: -1056px -928px}.mcsprite-shrub_lce { background-position: -1088px -928px}.mcsprite-shulker_box { background-position: -1120px -928px}.mcsprite-shulker_shell { background-position: -1152px -928px}.mcsprite-shulker_spawn_egg { background-position: -1184px -928px}.mcsprite-silverfish_spawn_egg { background-position: -1216px -928px}.mcsprite-skeleton_horse_spawn_egg { background-position: -1248px -928px}.mcsprite-skeleton_skull { background-position: 0 -960px}.mcsprite-skeleton_spawn_egg { background-position: -32px -960px}.mcsprite-slime_block { background-position: -64px -960px}.mcsprite-slime_spawn_egg { background-position: -96px -960px}.mcsprite-slimeball { background-position: -128px -960px}.mcsprite-small_amethyst_bud { background-position: -160px -960px}.mcsprite-small_dripleaf { background-position: -192px -960px}.mcsprite-smithing_table { background-position: -224px -960px}.mcsprite-smoker { background-position: -256px -960px}.mcsprite-smooth_basalt { background-position: -288px -960px}.mcsprite-smooth_quartz { background-position: -320px -960px}.mcsprite-smooth_quartz_block { background-position: -352px -960px}.mcsprite-smooth_quartz_slab { background-position: -384px -960px}.mcsprite-smooth_quartz_stairs { background-position: -416px -960px}.mcsprite-smooth_red_sandstone { background-position: -448px -960px}.mcsprite-smooth_red_sandstone_slab { background-position: -480px -960px}.mcsprite-smooth_red_sandstone_stairs { background-position: -512px -960px}.mcsprite-smooth_sandstone { background-position: -544px -960px}.mcsprite-smooth_sandstone_slab { background-position: -576px -960px}.mcsprite-smooth_sandstone_stairs { background-position: -608px -960px}.mcsprite-smooth_stone { background-position: -640px -960px}.mcsprite-smooth_stone_bricks { background-position: -672px -960px}.mcsprite-smooth_stone_slab { background-position: -704px -960px}.mcsprite-snow { background-position: -736px -960px}.mcsprite-snow_block { background-position: -768px -960px}.mcsprite-snowball { background-position: -800px -960px}.mcsprite-soul_campfire { background-position: -832px -960px}.mcsprite-soul_lantern { background-position: -864px -960px}.mcsprite-soul_sand { background-position: -896px -960px}.mcsprite-soul_soil { background-position: -928px -960px}.mcsprite-soul_torch { background-position: -960px -960px}.mcsprite-spawn_agent { background-position: -992px -960px}.mcsprite-spawn_bat { background-position: -1024px -960px}.mcsprite-spawn_bee { background-position: -1056px -960px}.mcsprite-spawn_blaze { background-position: -1088px -960px}.mcsprite-spawn_cat { background-position: -1120px -960px}.mcsprite-spawn_cave_spider { background-position: -1152px -960px}.mcsprite-spawn_chicken { background-position: -1184px -960px}.mcsprite-spawn_cod { background-position: -1216px -960px}.mcsprite-spawn_cow { background-position: -1248px -960px}.mcsprite-spawn_creeper { background-position: 0 -992px}.mcsprite-spawn_dolphin { background-position: -32px -992px}.mcsprite-spawn_donkey { background-position: -64px -992px}.mcsprite-spawn_drowned { background-position: -96px -992px}.mcsprite-spawn_elder_guardian { background-position: -128px -992px}.mcsprite-spawn_enderman { background-position: -160px -992px}.mcsprite-spawn_endermite { background-position: -192px -992px}.mcsprite-spawn_evoker { background-position: -224px -992px}.mcsprite-spawn_fox { background-position: -256px -992px}.mcsprite-spawn_ghast { background-position: -288px -992px}.mcsprite-spawn_goat { background-position: -320px -992px}.mcsprite-spawn_guardian { background-position: -352px -992px}.mcsprite-spawn_horse { background-position: -384px -992px}.mcsprite-spawn_husk { background-position: -416px -992px}.mcsprite-spawn_llama { background-position: -448px -992px}.mcsprite-spawn_magma_cube { background-position: -480px -992px}.mcsprite-spawn_mask { background-position: -512px -992px}.mcsprite-spawn_mooshroom { background-position: -544px -992px}.mcsprite-spawn_mule { background-position: -576px -992px}.mcsprite-spawn_npc { background-position: -608px -992px}.mcsprite-spawn_ocelot { background-position: -640px -992px}.mcsprite-spawn_panda { background-position: -672px -992px}.mcsprite-spawn_parrot { background-position: -704px -992px}.mcsprite-spawn_phantom { background-position: -736px -992px}.mcsprite-spawn_pig { background-position: -768px -992px}.mcsprite-spawn_pillager { background-position: -800px -992px}.mcsprite-spawn_polar_bear { background-position: -832px -992px}.mcsprite-spawn_pufferfish { background-position: -864px -992px}.mcsprite-spawn_rabbit { background-position: -896px -992px}.mcsprite-spawn_ravager { background-position: -928px -992px}.mcsprite-spawn_salmon { background-position: -960px -992px}.mcsprite-spawn_sheep { background-position: -992px -992px}.mcsprite-spawn_shulker { background-position: -1024px -992px}.mcsprite-spawn_silverfish { background-position: -1056px -992px}.mcsprite-spawn_skeleton { background-position: -1088px -992px}.mcsprite-spawn_skeleton_horse { background-position: -1120px -992px}.mcsprite-spawn_slime { background-position: -1152px -992px}.mcsprite-spawn_spider { background-position: -1184px -992px}.mcsprite-spawn_squid { background-position: -1216px -992px}.mcsprite-spawn_stray { background-position: -1248px -992px}.mcsprite-spawn_strider { background-position: 0 -1024px}.mcsprite-spawn_trader_llama { background-position: -32px -1024px}.mcsprite-spawn_tropical_fish { background-position: -64px -1024px}.mcsprite-spawn_turtle { background-position: -96px -1024px}.mcsprite-spawn_vex { background-position: -128px -1024px}.mcsprite-spawn_villager { background-position: -160px -1024px}.mcsprite-spawn_vindicator { background-position: -192px -1024px}.mcsprite-spawn_wandering_trader { background-position: -224px -1024px}.mcsprite-spawn_witch { background-position: -256px -1024px}.mcsprite-spawn_wither_skeleton { background-position: -288px -1024px}.mcsprite-spawn_wolf { background-position: -320px -1024px}.mcsprite-spawn_zoglin { background-position: -352px -1024px}.mcsprite-spawn_zombie { background-position: -384px -1024px}.mcsprite-spawn_zombie_horse { background-position: -416px -1024px}.mcsprite-spawn_zombie_pigman { background-position: -448px -1024px}.mcsprite-spawn_zombie_villager { background-position: -480px -1024px}.mcsprite-spawner { background-position: -512px -1024px}.mcsprite-spectral_arrow { background-position: -544px -1024px}.mcsprite-spider_eye { background-position: -576px -1024px}.mcsprite-spider_spawn_egg { background-position: -608px -1024px}.mcsprite-splash_mundane_potion { background-position: -640px -1024px}.mcsprite-splash_potion_of_decay { background-position: -672px -1024px}.mcsprite-splash_potion_of_fire_resistance { background-position: -704px -1024px}.mcsprite-splash_potion_of_harming { background-position: -736px -1024px}.mcsprite-splash_potion_of_healing { background-position: -768px -1024px}.mcsprite-splash_potion_of_invisibility { background-position: -800px -1024px}.mcsprite-splash_potion_of_leaping { background-position: -832px -1024px}.mcsprite-splash_potion_of_levitation { background-position: -864px -1024px}.mcsprite-splash_potion_of_luck { background-position: -896px -1024px}.mcsprite-splash_potion_of_night_vision { background-position: -928px -1024px}.mcsprite-splash_potion_of_poison { background-position: -960px -1024px}.mcsprite-splash_potion_of_regeneration { background-position: -992px -1024px}.mcsprite-splash_potion_of_slow_falling { background-position: -1024px -1024px}.mcsprite-splash_potion_of_slowness { background-position: -1056px -1024px}.mcsprite-splash_potion_of_strength { background-position: -1088px -1024px}.mcsprite-splash_potion_of_swiftness { background-position: -1120px -1024px}.mcsprite-splash_potion_of_the_turtle_master { background-position: -1152px -1024px}.mcsprite-splash_potion_of_water_breathing { background-position: -1184px -1024px}.mcsprite-splash_potion_of_weakness { background-position: -1216px -1024px}.mcsprite-splash_water_bottle { background-position: -1248px -1024px}.mcsprite-sponge { background-position: 0 -1056px}.mcsprite-spore_blossom { background-position: -32px -1056px}.mcsprite-spruce_boat { background-position: -64px -1056px}.mcsprite-spruce_button { background-position: -96px -1056px}.mcsprite-spruce_door { background-position: -128px -1056px}.mcsprite-spruce_fence { background-position: -160px -1056px}.mcsprite-spruce_fence_gate { background-position: -192px -1056px}.mcsprite-spruce_leaves { background-position: -224px -1056px}.mcsprite-spruce_log { background-position: -256px -1056px}.mcsprite-spruce_planks { background-position: -288px -1056px}.mcsprite-spruce_pressure_plate { background-position: -320px -1056px}.mcsprite-spruce_sapling { background-position: -352px -1056px}.mcsprite-spruce_sign { background-position: -384px -1056px}.mcsprite-spruce_slab { background-position: -416px -1056px}.mcsprite-spruce_stairs { background-position: -448px -1056px}.mcsprite-spruce_trapdoor { background-position: -480px -1056px}.mcsprite-spruce_wood { background-position: -512px -1056px}.mcsprite-spruce_wood_button { background-position: -544px -1056px}.mcsprite-spruce_wood_door { background-position: -576px -1056px}.mcsprite-spruce_wood_fence { background-position: -608px -1056px}.mcsprite-spruce_wood_fence_gate { background-position: -640px -1056px}.mcsprite-spruce_wood_planks { background-position: -672px -1056px}.mcsprite-spruce_wood_pressure_plate { background-position: -704px -1056px}.mcsprite-spruce_wood_sign { background-position: -736px -1056px}.mcsprite-spruce_wood_slab { background-position: -768px -1056px}.mcsprite-spruce_wood_stairs { background-position: -800px -1056px}.mcsprite-spruce_wood_trapdoor { background-position: -832px -1056px}.mcsprite-spyglass { background-position: -864px -1056px}.mcsprite-squid_spawn_egg { background-position: -896px -1056px}.mcsprite-steak { background-position: -928px -1056px}.mcsprite-stick { background-position: -960px -1056px}.mcsprite-sticky_piston { background-position: -992px -1056px}.mcsprite-stone { background-position: -1024px -1056px}.mcsprite-stone_axe { background-position: -1056px -1056px}.mcsprite-stone_brick_slab { background-position: -1088px -1056px}.mcsprite-stone_brick_stairs { background-position: -1120px -1056px}.mcsprite-stone_brick_wall { background-position: -1152px -1056px}.mcsprite-stone_bricks { background-position: -1184px -1056px}.mcsprite-stone_bricks_monster_egg { background-position: -1216px -1056px}.mcsprite-stone_button { background-position: -1248px -1056px}.mcsprite-stone_hoe { background-position: 0 -1088px}.mcsprite-stone_monster_egg { background-position: -32px -1088px}.mcsprite-stone_pickaxe { background-position: -64px -1088px}.mcsprite-stone_pressure_plate { background-position: -96px -1088px}.mcsprite-stone_shovel { background-position: -128px -1088px}.mcsprite-stone_slab { background-position: -160px -1088px}.mcsprite-stone_stairs { background-position: -192px -1088px}.mcsprite-stone_sword { background-position: -224px -1088px}.mcsprite-stray_spawn_egg { background-position: -256px -1088px}.mcsprite-strider_spawn_egg { background-position: -288px -1088px}.mcsprite-string { background-position: -320px -1088px}.mcsprite-stripped_acacia_log { background-position: -352px -1088px}.mcsprite-stripped_acacia_wood { background-position: -384px -1088px}.mcsprite-stripped_birch_log { background-position: -416px -1088px}.mcsprite-stripped_birch_wood { background-position: -448px -1088px}.mcsprite-stripped_crimson_hyphae { background-position: -480px -1088px}.mcsprite-stripped_crimson_stem { background-position: -512px -1088px}.mcsprite-stripped_dark_oak_log { background-position: -544px -1088px}.mcsprite-stripped_dark_oak_wood { background-position: -576px -1088px}.mcsprite-stripped_jungle_log { background-position: -608px -1088px}.mcsprite-stripped_jungle_wood { background-position: -640px -1088px}.mcsprite-stripped_oak_log { background-position: -672px -1088px}.mcsprite-stripped_oak_wood { background-position: -704px -1088px}.mcsprite-stripped_spruce_log { background-position: -736px -1088px}.mcsprite-stripped_spruce_wood { background-position: -768px -1088px}.mcsprite-stripped_warped_hyphae { background-position: -800px -1088px}.mcsprite-stripped_warped_stem { background-position: -832px -1088px}.mcsprite-structure_block { background-position: -864px -1088px}.mcsprite-structure_void { background-position: -896px -1088px}.mcsprite-sugar { background-position: -928px -1088px}.mcsprite-sugar_cane { background-position: -960px -1088px}.mcsprite-sunflower { background-position: -992px -1088px}.mcsprite-suspicious_stew { background-position: -1024px -1088px}.mcsprite-sweet_berries { background-position: -1056px -1088px}.mcsprite-tall_grass { background-position: -1088px -1088px}.mcsprite-target { background-position: -1120px -1088px}.mcsprite-terracotta { background-position: -1152px -1088px}.mcsprite-thick_lingering_potion { background-position: -1184px -1088px}.mcsprite-thick_potion { background-position: -1216px -1088px}.mcsprite-thick_splash_potion { background-position: -1248px -1088px}.mcsprite-tinted_glass { background-position: 0 -1120px}.mcsprite-tipped_arrow { background-position: -32px -1120px}.mcsprite-tnt { background-position: -64px -1120px}.mcsprite-top_snow { background-position: -96px -1120px}.mcsprite-torch { background-position: -128px -1120px}.mcsprite-totem_of_undying { background-position: -160px -1120px}.mcsprite-trader_llama_spawn_egg { background-position: -192px -1120px}.mcsprite-trapped_chest { background-position: -224px -1120px}.mcsprite-treasure_map { background-position: -256px -1120px}.mcsprite-trident { background-position: -288px -1120px}.mcsprite-tripwire_hook { background-position: -320px -1120px}.mcsprite-tropical_fish { background-position: -352px -1120px}.mcsprite-tropical_fish_spawn_egg { background-position: -384px -1120px}.mcsprite-tube_coral { background-position: -416px -1120px}.mcsprite-tube_coral_block { background-position: -448px -1120px}.mcsprite-tube_coral_fan { background-position: -480px -1120px}.mcsprite-tuff { background-position: -512px -1120px}.mcsprite-turtle_egg { background-position: -544px -1120px}.mcsprite-turtle_helmet { background-position: -576px -1120px}.mcsprite-turtle_shell { background-position: -608px -1120px}.mcsprite-turtle_spawn_egg { background-position: -640px -1120px}.mcsprite-twisting_vines { background-position: -672px -1120px}.mcsprite-uncraftable_lingering_potion { background-position: -704px -1120px}.mcsprite-uncraftable_potion { background-position: -736px -1120px}.mcsprite-uncraftable_splash_potion { background-position: -768px -1120px}.mcsprite-uncraftable_tipped_arrow { background-position: -800px -1120px}.mcsprite-vex_spawn_egg { background-position: -832px -1120px}.mcsprite-villager_spawn_egg { background-position: -864px -1120px}.mcsprite-vindicator_spawn_egg { background-position: -896px -1120px}.mcsprite-vines { background-position: -928px -1120px}.mcsprite-void_air { background-position: -960px -1120px}.mcsprite-wandering_trader_spawn_egg { background-position: -992px -1120px}.mcsprite-warped_button { background-position: -1024px -1120px}.mcsprite-warped_door { background-position: -1056px -1120px}.mcsprite-warped_fence { background-position: -1088px -1120px}.mcsprite-warped_fence_gate { background-position: -1120px -1120px}.mcsprite-warped_fungus { background-position: -1152px -1120px}.mcsprite-warped_fungus_on_a_stick { background-position: -1184px -1120px}.mcsprite-warped_hyphae { background-position: -1216px -1120px}.mcsprite-warped_nylium { background-position: -1248px -1120px}.mcsprite-warped_planks { background-position: 0 -1152px}.mcsprite-warped_pressure_plate { background-position: -32px -1152px}.mcsprite-warped_roots { background-position: -64px -1152px}.mcsprite-warped_sign { background-position: -96px -1152px}.mcsprite-warped_slab { background-position: -128px -1152px}.mcsprite-warped_stairs { background-position: -160px -1152px}.mcsprite-warped_stem { background-position: -192px -1152px}.mcsprite-warped_trapdoor { background-position: -224px -1152px}.mcsprite-warped_wart_block { background-position: -256px -1152px}.mcsprite-water { background-position: -288px -1152px}.mcsprite-water_bottle { background-position: -320px -1152px}.mcsprite-water_bucket { background-position: -352px -1152px}.mcsprite-waxed_block_of_copper { background-position: -384px -1152px}.mcsprite-waxed_copper { background-position: -416px -1152px}.mcsprite-waxed_copper_block { background-position: -448px -1152px}.mcsprite-waxed_cut_copper { background-position: -480px -1152px}.mcsprite-waxed_cut_copper_block { background-position: -512px -1152px}.mcsprite-waxed_cut_copper_slab { background-position: -544px -1152px}.mcsprite-waxed_cut_copper_stairs { background-position: -576px -1152px}.mcsprite-waxed_exposed_copper { background-position: -608px -1152px}.mcsprite-waxed_exposed_copper_block { background-position: -640px -1152px}.mcsprite-waxed_exposed_cut_copper { background-position: -672px -1152px}.mcsprite-waxed_exposed_cut_copper_block { background-position: -704px -1152px}.mcsprite-waxed_exposed_cut_copper_slab { background-position: -736px -1152px}.mcsprite-waxed_exposed_cut_copper_stairs { background-position: -768px -1152px}.mcsprite-waxed_oxidized_copper { background-position: -800px -1152px}.mcsprite-waxed_oxidized_copper_block { background-position: -832px -1152px}.mcsprite-waxed_oxidized_cut_copper { background-position: -864px -1152px}.mcsprite-waxed_oxidized_cut_copper_block { background-position: -896px -1152px}.mcsprite-waxed_oxidized_cut_copper_slab { background-position: -928px -1152px}.mcsprite-waxed_oxidized_cut_copper_stairs { background-position: -960px -1152px}.mcsprite-waxed_weathered_copper { background-position: -992px -1152px}.mcsprite-waxed_weathered_copper_block { background-position: -1024px -1152px}.mcsprite-waxed_weathered_cut_copper { background-position: -1056px -1152px}.mcsprite-waxed_weathered_cut_copper_block { background-position: -1088px -1152px}.mcsprite-waxed_weathered_cut_copper_slab { background-position: -1120px -1152px}.mcsprite-waxed_weathered_cut_copper_stairs { background-position: -1152px -1152px}.mcsprite-weathered_copper { background-position: -1184px -1152px}.mcsprite-weathered_copper_block { background-position: -1216px -1152px}.mcsprite-weathered_cut_copper { background-position: -1248px -1152px}.mcsprite-weathered_cut_copper_block { background-position: 0 -1184px}.mcsprite-weathered_cut_copper_slab { background-position: -32px -1184px}.mcsprite-weathered_cut_copper_stairs { background-position: -64px -1184px}.mcsprite-weeping_vines { background-position: -96px -1184px}.mcsprite-wet_sponge { background-position: -128px -1184px}.mcsprite-wheat { background-position: -160px -1184px}.mcsprite-wheat_seeds { background-position: -192px -1184px}.mcsprite-white_banner { background-position: -224px -1184px}.mcsprite-white_bed { background-position: -256px -1184px}.mcsprite-white_bed_lce { background-position: -288px -1184px}.mcsprite-white_candle { background-position: -320px -1184px}.mcsprite-white_carpet { background-position: -352px -1184px}.mcsprite-white_concrete { background-position: -384px -1184px}.mcsprite-white_concrete_powder { background-position: -416px -1184px}.mcsprite-white_dye { background-position: -448px -1184px}.mcsprite-white_firework_star { background-position: -480px -1184px}.mcsprite-white_glazed_terracotta { background-position: -512px -1184px}.mcsprite-white_shield { background-position: -544px -1184px}.mcsprite-white_shulker_box { background-position: -576px -1184px}.mcsprite-white_stained_glass { background-position: -608px -1184px}.mcsprite-white_stained_glass_pane { background-position: -640px -1184px}.mcsprite-white_terracotta { background-position: -672px -1184px}.mcsprite-white_tulip { background-position: -704px -1184px}.mcsprite-white_wool { background-position: -736px -1184px}.mcsprite-witch_spawn_egg { background-position: -768px -1184px}.mcsprite-wither_rose { background-position: -800px -1184px}.mcsprite-wither_skeleton_skull { background-position: -832px -1184px}.mcsprite-wither_skeleton_spawn_egg { background-position: -864px -1184px}.mcsprite-wolf_spawn_egg { background-position: -896px -1184px}.mcsprite-wooden_axe { background-position: -928px -1184px}.mcsprite-wooden_hoe { background-position: -960px -1184px}.mcsprite-wooden_pickaxe { background-position: -992px -1184px}.mcsprite-wooden_shovel { background-position: -1024px -1184px}.mcsprite-wooden_slab { background-position: -1056px -1184px}.mcsprite-wooden_sword { background-position: -1088px -1184px}.mcsprite-woodland_explorer_map { background-position: -1120px -1184px}.mcsprite-written_book { background-position: -1152px -1184px}.mcsprite-yellow_banner { background-position: -1184px -1184px}.mcsprite-yellow_bed { background-position: -1216px -1184px}.mcsprite-yellow_bed_lce { background-position: -1248px -1184px}.mcsprite-yellow_candle { background-position: 0 -1216px}.mcsprite-yellow_carpet { background-position: -32px -1216px}.mcsprite-yellow_concrete { background-position: -64px -1216px}.mcsprite-yellow_concrete_powder { background-position: -96px -1216px}.mcsprite-yellow_dye { background-position: -128px -1216px}.mcsprite-yellow_firework_star { background-position: -160px -1216px}.mcsprite-yellow_glazed_terracotta { background-position: -192px -1216px}.mcsprite-yellow_shield { background-position: -224px -1216px}.mcsprite-yellow_shulker_box { background-position: -256px -1216px}.mcsprite-yellow_stained_glass { background-position: -288px -1216px}.mcsprite-yellow_stained_glass_pane { background-position: -320px -1216px}.mcsprite-yellow_terracotta { background-position: -352px -1216px}.mcsprite-yellow_wool { background-position: -384px -1216px}.mcsprite-zoglin_spawn_egg { background-position: -416px -1216px}.mcsprite-zombie_head { background-position: -448px -1216px}.mcsprite-zombie_horse_spawn_egg { background-position: -480px -1216px}.mcsprite-zombie_pigman_spawn_egg { background-position: -512px -1216px}.mcsprite-zombie_spawn_egg { background-position: -544px -1216px}.mcsprite-zombie_villager_spawn_egg { background-position: -576px -1216px}.mcsprite-zombified_piglin_spawn_egg { background-position: -608px -1216px}.toc { display: none; position: relative; margin: 1em 0; padding: .2em .5em; background-color: #f8f9fa; border: solid 1px #eaecf0; box-sizing: border-box}.toctogglecheckbox~ul { visibility: hidden; height: 0}.toctogglecheckbox:not(:checked)~ul { visibility: visible; padding-bottom: 20px; height: auto}.toctitle { padding: 0 25px 0 32px}.toctitle .mw-ui-icon { position: absolute; left: 0}.toctitle .toctogglespan+.mw-ui-icon { top: 8px; right: 0; left: auto}.toctogglelabel { cursor: pointer; position: absolute; left: 0; top: 0; right: 0; height: 50px; z-index: 1}.client-js .toc .toctitle { visibility: hidden; background-position: right center; font-weight: 700; border-bottom: 0}.client-js .toc .toctitle h2 { display: inline-block; font-family: -apple-system,blinkmacsystemfont,segoe ui,roboto,lato,helvetica,arial,sans-serif; font-size: 1.125em; vertical-align: middle}.client-js .toc .tocnumber { display: none}.client-js .toc>ul { margin: 0 22.85714286em 0 32px; padding-left: 0; font-size: .875em}.client-js .toc ul { list-style: none}@media screen and (min-width: 720px) { .client-js .toc { display:table } .client-js .toc .toctitle { visibility: visible }}body { font-family: -apple-system,blinkmacsystemfont,segoe ui,roboto,lato,helvetica,arial,sans-serif; line-height: 1.4; -webkit-tap-highlight-color: rgba(0,0,0,.2); overflow-y: scroll}.content { line-height: 1.65; word-wrap: break-word}.content .center { width: 100%; text-align: center}.content .center>*,.content .center .thumb { margin-left: auto; margin-right: auto}@media all and (max-width: 320px - 1) { html { font-size:80% } .content { margin: 0 12px }}.nomobile { display: none!important}@supports(font: -apple-system-body) { html { font:-apple-system-body } body { font-size: 94.11764706% } @media all and (max-width: 320px - 1) { body { font-size:75.29411765% } }}.content figure,.content .thumb { margin: .6em 0}.content figure .thumbinner,.content .thumb .thumbinner { margin: 0 auto; max-width: 100%!important}.content figcaption,.content .thumbcaption { margin: .5em 0 0; font-size: .8125em; line-height: 1.5; padding: 0!important; color: #54595d}.content .thumbcaption { width: auto!important}.content .mw-image-border,.content .thumbborder { border: 1px solid #c8ccd1}.content .magnify { display: none}.content img { vertical-align: middle}.content .floatright { clear: right; float: right; margin: 0 0 .6em .6em}.content .floatleft { clear: left; float: left; margin: 0 .6em .6em 0}.content a>img,.content noscript>img { max-width: 100%!important; height: auto!important}.content .noresize { max-width: 100%; overflow-x: auto}.content .noresize a>img { max-width: none!important}h1 { font-size: 1.7em}h2 { font-size: 1.5em}h3 { font-size: 1.2em; font-weight: 700}h4 { font-weight: 700}.pre-content h1,.content h1,.content h2 { font-family: linux libertine,helvetica,georgia,times,serif}.pre-content h1,.content h1,.content h2,h3,h4,h5,h6 { line-height: 1.3; word-wrap: break-word; word-break: break-word}.content h2,.content h3,.content h4,.content h5,.content h6 { padding: .5em 0}.content p+h3 { margin-top: 1.5em}.content {}.content ol { padding-left: 2.25em}.content ul { list-style-type: disc; padding-left: 1em}.content ul>li>ul { list-style-type: circle}.content ul>li>ul>li>ul { list-style-type: square}.content ol ol,.content ul ol,.content ol ul,.content ul ul { margin-left: 1em}.content li { margin-bottom: 10px}.content li:last-child { margin-bottom: inherit}dl { margin-left: 1em}dl dt { font-weight: 700}dl dd { display: block; overflow: auto}body.mw-hide-empty-elt .mw-empty-elt { display: none}a:not([href]) { color: #3f7dfb; cursor: pointer}a { color: #3f7dfb; text-decoration: none}a:visited { color: #ba91ff}a:active { color: #986be5}a:hover { text-decoration: underline}a.new,a.new:visited,a.new:hover { color: #d33}a.new>*,a.new:visited>*,a.new:hover>* { color: #d33}a.external { background-size: 10px; background-repeat: no-repeat; background-position: center right; padding-right: 13px}.return-link { display: block; font-size: .875em; margin-top: 1.5em}.plainlinks a { background: 0 0!important; padding: 0!important}.content p { margin: .5em 0 1em}.content hr { background-color: #a2a9b1; height: 1px; border: 0}.content kbd,.content samp,.content code,.content pre { font-family: menlo,consolas,liberation mono,courier new,monospace; border: solid 1px #c8ccd1; white-space: pre-wrap}.content code { padding: .2em .5em}.content pre { padding: 1em}b,strong { font-weight: 700}blockquote { border-left: 3px solid #c8ccd1; padding: 8px 24px 8px 32px; font-family: linux libertine,helvetica,georgia,times,serif; font-size: 1.1em}blockquote>:first-child { margin-top: 0}blockquote>:last-child { margin-bottom: 0}blockquote>:only-child { margin-top: 0; margin-bottom: 0}em,i { font-style: italic}sup { vertical-align: super}sub { vertical-align: sub}sub,sup,.content .mw-ref { font-size: .75em; line-height: 1}@media all and (max-width: 720px) { .content table { display:block; width: 100%!important; box-sizing: border-box } .content table.wikitable { border: 0 } .content caption { display: block }}.content table { margin: 1em 0; overflow: auto; overflow-y: hidden; overflow-x: auto}.content table caption { text-align: left}.wikitable { border: 1px solid #54595d; border-color: rgba(84,89,93,.3)}.wikitable>tr>th,.wikitable>tr>td,.wikitable>*>tr>th,.wikitable>*>tr>td { border: 1px solid #54595d; border-color: rgba(84,89,93,.3); padding: .2em}.wikitable>tr>th,.wikitable>*>tr>th { background-color: #eaecf0}@media screen and (min-width: 720px) { .client-js #searchIcon { display:none } .header .branding-box { width: 10.0625em } .header .search-box { display: table-cell; width: auto } .header .search-box .search { width: 23.4375em } .pre-content,#mw-content-text>form,.content,.post-content { max-width: 993.3px; margin: 0 3.35em } .content figure,.content .thumb { max-width: 704px } .content figure.mw-halign-left,.content .thumb.mw-halign-left,.content figure.tleft,.content .thumb.tleft { float: left; clear: left; margin-right: 1.4em } .content figure.mw-default-size,.content .thumb.mw-default-size,.content figure.mw-halign-right,.content .thumb.mw-halign-right,.content figure.tright,.content .thumb.tright { float: right; clear: right; margin-left: 1.4em } .content table caption { background: inherit } .content table tbody { display: table-row-group } .last-modified-bar { background-color: transparent; padding-left: 0; padding-right: 0; font-size: 1em }}@media screen and (min-width: 1000px) { .banner-container,.header,.page-header-bar,.overlay-header,.content,.overlay-content,.content-unstyled,.pre-content,.post-content,#mw-content-text>form { margin-left:auto; margin-right: auto; width: 90%; max-width: 993.3px } .header { max-width: 995.3px }}toast.mw-notification-type-error,.mw-notification.mw-notification-type-error { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&format=rasterized&skin=minerva&version=qhhuv); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&format=original&skin=minerva&version=qhhuv)}toast.mw-notification-type-error,.mw-notification.mw-notification-type-error--reference { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&variant=reference&format=rasterized&skin=minerva&version=qhhuv); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&variant=reference&format=original&skin=minerva&version=qhhuv)}a.external { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&format=rasterized&lang=en&skin=minerva&version=qhhuv); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&format=original&lang=en&skin=minerva&version=qhhuv)}a.external--reference { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&variant=reference&format=rasterized&lang=en&skin=minerva&version=qhhuv); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&variant=reference&format=original&lang=en&skin=minerva&version=qhhuv)}.mw-ui-icon-wikimedia-history-base20:before,.mw-ui-background-icon-history { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-history-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-history-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-language-base20:before,.mw-ui-background-icon-language { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-language-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-language-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-edit-base20:before,.mw-ui-background-icon-edit { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-edit-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-edit-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-editLock-base20:before,.mw-ui-background-icon-editLock { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-editLock-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-editLock-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-search-base20:before,.mw-ui-background-icon-search { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-search-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-search-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-menu-base20:before,.mw-ui-background-icon-menu { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-menu-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-menu-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-star-base20:before,.mw-ui-background-icon-star { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-star-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-star-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-halfStar-base20:before,.mw-ui-background-icon-halfStar { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&format=rasterized&lang=en&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&format=original&lang=en&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-halfStar-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=invert&format=rasterized&lang=en&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=invert&format=original&lang=en&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-halfStar-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=progressive&format=rasterized&lang=en&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=progressive&format=original&lang=en&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-unStar-base20:before,.mw-ui-background-icon-unStar { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-unStar-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-unStar-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-userAvatar-base20:before,.mw-ui-background-icon-userAvatar { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-userAvatar-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=invert&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=invert&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-wikimedia-userAvatar-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=progressive&format=rasterized&skin=minerva&version=4y50j); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=progressive&format=original&skin=minerva&version=4y50j)}.mw-ui-icon-minerva-speechBubbles:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=speechBubbles&format=rasterized&lang=en&skin=minerva&version=jhnt0); background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+c3BlZWNoIGJ1YmJsZXM8L3RpdGxlPjxnIGZpbGw9IiM1NDU5NWQiPjxwYXRoIGQ9Ik0xNyA0djdhMiAyIDAgMDEtMiAySDR2MWEyIDIgMCAwMDIgMmgxMGw0IDRWNmEyIDIgMCAwMC0yLTJ6TTYgMTBIMHY2eiIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgcng9IjIiLz48L2c+PC9zdmc+)}.mw-ui-icon-minerva-specialPages:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=specialPages&format=rasterized&lang=en&skin=minerva&version=jhnt0); background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+c3BlY2lhbCBwYWdlczwvdGl0bGU+PGcgZmlsbD0iIzU0NTk1ZCI+PHBhdGggZD0iTTcgMGEyIDIgMCAwMC0yIDJoOWEyIDIgMCAwMTIgMnYxMmEyIDIgMCAwMDItMlYyYTIgMiAwIDAwLTItMnoiLz48cGF0aCBkPSJNMTMgMjBINGEyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg5YTIgMiAwIDAxMiAydjEzYTIgMiAwIDAxLTIgMnptLTYuNS0zLjVsLjQxLTEuMDlMOCAxNWwtMS4wOS0uNDEtLjQxLTEuMDktLjQxIDEuMDlMNSAxNWwxLjA5LjQxLjQxIDEuMDl6bTIuOTgyLS45NDlsLjk1Mi0yLjU2MSAyLjUzLS45NjQtMi41My0uOTY0TDkuNDgyIDguNWwtLjk1MiAyLjU2Mi0yLjUzLjk2NCAyLjUzLjk2NC45NTIgMi41NjF6TTYgMTAuNWwuNTQ3LTEuNDUzTDggOC41bC0xLjQ1My0uNTQ3TDYgNi41bC0uNTQ3IDEuNDUzTDQgOC41bDEuNDUzLjU0N0w2IDEwLjV6Ii8+PC9nPjwvc3ZnPg==)}.mw-ui-icon-minerva-recentChanges:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=recentChanges&format=rasterized&lang=en&skin=minerva&version=jhnt0); background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+cmVjZW50IGNoYW5nZXM8L3RpdGxlPjxnIGZpbGw9IiM1NDU5NWQiPjxjaXJjbGUgY3g9IjIiIGN5PSI0IiByPSIyIi8+PGNpcmNsZSBjeD0iMiIgY3k9IjEwIiByPSIyIi8+PGNpcmNsZSBjeD0iMiIgY3k9IjE2IiByPSIyIi8+PHBhdGggZD0iTTYgM2gxMXYySDZ6bTAgNmg2djJINnptMCA2aDJ2Mkg2em0xMi43Ni0zLjExbDEuMDc4LTEuMTEyYS41NTYuNTU2IDAgMDAwLS43ODNsLTEuODU1LTEuODMzYS41NTYuNTU2IDAgMDAtLjc4MyAwbC0xLjA5IDEuMDc3IDIuNjUgMi42NXptLTMuMjI3LTIuMDYyTDEwIDE1LjM2MVYxOGgyLjYzOWw1LjUzMy01LjUzM3oiLz48L2c+PC9zdmc+)}.mw-ui-icon-minerva-die:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=die&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=die&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-heart:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=heart&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=heart&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-home:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=home&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=home&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-logIn:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logIn&format=rasterized&lang=en&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logIn&format=original&lang=en&skin=minerva&version=17p52)}.mw-ui-icon-minerva-logOut:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logOut&format=rasterized&lang=en&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logOut&format=original&lang=en&skin=minerva&version=17p52)}.mw-ui-icon-minerva-settings:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=settings&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=settings&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-mapPin:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=mapPin&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=mapPin&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-unStar:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=unStar&format=rasterized&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=unStar&format=original&skin=minerva&version=17p52)}.mw-ui-icon-minerva-userContributions:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=userContributions&format=rasterized&lang=en&skin=minerva&version=17p52); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=userContributions&format=original&lang=en&skin=minerva&version=17p52)}#mw-mf-page-left { position: fixed; top: 0; left: 0; bottom: 0; min-width: 275px; visibility: hidden; max-width: 80%; z-index: 2; overflow-y: auto; background-color: #eaecf0; -webkit-transform: translate(-100%,0); -ms-transform: translate(-100%,0); transform: translate(-100%,0)}@media screen and (min-width: 720px) { #mw-mf-page-left { min-width:320px }}#mw-mf-page-left ul { padding-bottom: 22px}.main-menu-mask { position: fixed; top: 0; left: 0; right: 0; opacity: 0; bottom: 0; background: rgba(0,0,0,.8); z-index: 1; visibility: hidden}#main-menu-input:checked~.main-menu-mask { visibility: visible; opacity: .5}#main-menu-input:checked~#mw-mf-page-left { visibility: visible; box-shadow: 1px 0 8px 0 rgba(0,0,0,.35); -webkit-transform: translate(0,0); -ms-transform: translate(0,0); transform: translate(0,0)}.minerva-animations-ready #mw-mf-page-left { -webkit-transition: opacity 250ms ease-in-out,visibility 250ms ease-in-out,transform 250ms ease-in-out; transition: opacity 250ms ease-in-out,visibility 250ms ease-in-out,transform 250ms ease-in-out}.minerva-animations-ready .main-menu-mask { -webkit-transition: opacity 100ms ease-in-out,visibility 0ms linear 100ms; transition: opacity 100ms ease-in-out,visibility 0ms linear 100ms}.minerva-animations-ready #main-menu-input:checked~.main-menu-mask { -webkit-transition: opacity 100ms ease-in-out; transition: opacity 100ms ease-in-out}.navigation-full-screen #mw-mf-page-left { max-width: none; -webkit-transform: none; -ms-transform: none; transform: none}.hotfix-T264376 .main-menu-mask { display: none}.hotfix-T264376 #main-menu-input:checked~.main-menu-mask { display: block}#mw-mf-page-left .secondary-action { border: 0; font-size: 16px; position: absolute; right: 0; top: 0; bottom: 0; border-left: 1px solid #a2a9b1; color: transparent}#mw-mf-page-left .primary-action { margin-right: 3.5em}#mw-mf-page-left ul:first-child li:first-child { border-top: 0}#mw-mf-page-left ul li { background-color: #fff; position: relative; border-top: 1px solid #eaecf0; margin-top: -1px}#mw-mf-page-left ul li:first-child { border-top: 0}#mw-mf-page-left ul li a { color: #54595d; display: block; max-width: 100%; padding: 12px 10px 12px 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap}#mw-mf-page-left ul li a.secondary-action { padding-left: 10px}#mw-mf-page-left ul li a:hover { box-shadow: inset 4px 0 0 0 #36c; text-decoration: none}#mw-mf-page-left ul li a span { font-size: .875em; font-weight: 700; vertical-align: middle}#mw-mf-page-left ul.hlist li { background-color: transparent; border: 0; margin: 0; font-size: .75em}#mw-mf-page-left ul.hlist li:after { content: none}#mw-mf-page-left ul.hlist li a { color: #36c; padding: .7em 12px}#mw-mf-page-left ul.hlist li a:hover { background-color: transparent; box-shadow: none}.notifications-overlay { visibility: visible}.notifications-overlay.navigation-drawer { display: block; width: auto; right: 0; box-shadow: -5px 0 0 0 rgba(0,0,0,.35); -webkit-transform: translate(100%,0); -ms-transform: translate(100%,0); transform: translate(100%,0); -webkit-transition: transform 250ms ease-in-out; transition: transform 250ms ease-in-out}.notifications-overlay.navigation-drawer.visible { -webkit-transform: translate(0,0); -ms-transform: translate(0,0); transform: translate(0,0)}@media all and (min-width: 720px) { .notifications-overlay.navigation-drawer { left:40% } .notifications-overlay.navigation-drawer .overlay-header { margin: 0; width: 100%; max-width: none } .notifications-overlay.navigation-drawer .overlay-header .cancel { left: 0 }}.toggle-list__checkbox { position: absolute; z-index: -1; opacity: 0}.toggle-list__toggle { display: inline-block; cursor: pointer}.toggle-list__checkbox:focus+.toggle-list__toggle { outline: dotted 1px; outline: auto #447ff5}.toggle-list__checkbox:checked+.toggle-list__toggle { outline: 0; background: rgba(1,1,1,.1)}.touch-events .toggle-list__checkbox:focus+.toggle-list__toggle { outline: 0}.toggle-list__list { background: #fff; position: absolute; overflow-y: auto; z-index: 2; box-shadow: 0 5px 17px 0 rgba(0,0,0,.24),0 0 1px #a2a9b1; visibility: hidden; opacity: 0}.toggle-list__checkbox:checked~.toggle-list__list { visibility: visible; opacity: 1}.mw-ui-icon-minerva-articleRedirect:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-articleRedirect,.mw-ui-icon-articleRedirect-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-articleRedirect,.mw-ui-icon-articleRedirect-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-infoFilled:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-infoFilled,.mw-ui-icon-infoFilled-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-infoFilled,.mw-ui-icon-infoFilled-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-quotes:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-quotes,.mw-ui-icon-quotes-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-quotes,.mw-ui-icon-quotes-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-link:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-link,.mw-ui-icon-link-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=invert&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=invert&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-link,.mw-ui-icon-link-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=progressive&format=original&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-listBullet:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-listBullet,.mw-ui-icon-listBullet-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-listBullet,.mw-ui-icon-listBullet-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-ellipsis:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-ellipsis,.mw-ui-icon-ellipsis-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=invert&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=invert&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-ellipsis,.mw-ui-icon-ellipsis-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=progressive&format=original&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-userAvatar:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-userAvatar,.mw-ui-icon-userAvatar-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=invert&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=invert&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-userAvatar,.mw-ui-icon-userAvatar-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=progressive&format=original&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-userAvatarOutline:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-userAvatarOutline,.mw-ui-icon-userAvatarOutline-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=invert&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=invert&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-userAvatarOutline,.mw-ui-icon-userAvatarOutline-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=progressive&format=original&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-userGroup:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-userGroup,.mw-ui-icon-userGroup-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-userGroup,.mw-ui-icon-userGroup-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-userTalk:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-userTalk,.mw-ui-icon-userTalk-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-userTalk,.mw-ui-icon-userTalk-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-logoWikidata:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-invert.oo-ui-icon-logoWikidata,.mw-ui-icon-logoWikidata-invert:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=invert&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=invert&format=original&skin=minerva&version=bdzvr)}.oo-ui-image-progressive.oo-ui-icon-logoWikidata,.mw-ui-icon-logoWikidata-progressive:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); background-image: linear-gradient(transparent,transparent),url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=progressive&format=original&skin=minerva&version=bdzvr)}.mw-ui-icon-minerva-markup:before { background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.personalMenu.icons&image=markup&format=rasterized&skin=minerva&version=1j2d9); background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+bWFya3VwPC90aXRsZT48ZyBmaWxsPSIjNTQ1OTVkIj48cGF0aCBkPSJNNi41IDMuNUwwIDEwbDEuNSAxLjUgNSA1TDggMTVsLTUtNSA1LTV6bTcgMEwxMiA1bDUgNS01IDUgMS41IDEuNUwyMCAxMHoiLz48L2c+PC9zdmc+)}div#mw-content-text { position: absolute;}body { text-rendering: optimizeLegibility; text-rendering: geometricPrecision} +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +.client-js .mw-dismissable-notice { + display: none +} + +.mw-dismissable-notice-close { + visibility: hidden +} + +.sitedir-ltr .mw-dismissable-notice-close { + float: right +} + +.sitedir-rtl .mw-dismissable-notice-close { + float: left +} + +.sitedir-ltr .mw-dismissable-notice-body { + margin: .5em 20% .5em 5em +} + +.sitedir-rtl .mw-dismissable-notice-body { + margin: .5em 5em .5em 20% +} + +.hlist dl, .hlist ol, .hlist ul { + margin: 0; + padding: 0 +} + +.hlist dl dl, .hlist ol dl, .hlist ul dl, .hlist dl ol, .hlist ol ol, .hlist ul ol, .hlist dl ul, .hlist ol ul, .hlist ul ul { + display: inline +} + +.hlist dd, .hlist dt, .hlist li { + margin: 0; + display: inline +} + +ul.hlist li, .hlist > ul li, .hlist > dl li { + display: inline-block; + margin-right: 8px +} + +.hlist-separated li:after { + content: '•' !important; + padding-left: 8px; + font-size: 1em; + line-height: 1 +} + +.hlist-separated :last-child:after { + content: none !important +} + +.mw-ui-button { + background-color: #f8f9fa; + color: #202122; + display: inline-block; + -moz-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #a2a9b1; + border-radius: 2px; + cursor: pointer; + vertical-align: middle; + font-family: inherit; + font-size: 1em; + font-weight: 700; + line-height: 1.28571429em; + text-align: center; + -webkit-appearance: none +} + +.mw-ui-button:not(.mw-ui-icon-element) { + min-height: 32px; + min-width: 4em; + max-width: 28.75em; + margin: 0; + padding: 5px 12px +} + +.mw-ui-button:not(:disabled) { + -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms; + transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms +} + +.mw-ui-button:not(:disabled):visited { + color: #202122 +} + +.mw-ui-button:not(:disabled):hover { + background-color: #fff; + color: #404244; + border-color: #a2a9b1 +} + +.mw-ui-button:not(:disabled):focus { + color: #202122; + border-color: #36c; + box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff; + outline-width: 0 +} + +.mw-ui-button:not(:disabled):focus::-moz-focus-inner { + border-color: transparent; + padding: 0 +} + +.mw-ui-button:not(:disabled):active, .mw-ui-button:not(:disabled).is-on { + background-color: #c8ccd1; + color: #000; + border-color: #72777d; + box-shadow: none +} + +.mw-ui-button:disabled { + background-color: #c8ccd1; + color: #fff; + border-color: #c8ccd1; + cursor: default +} + +.mw-ui-button.mw-ui-icon-element:not(.mw-ui-icon-with-label-desktop) { + color: transparent !important +} + +.mw-ui-button.mw-ui-icon-element:not(.mw-ui-icon-with-label-desktop) span { + display: block; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + width: 1px; + height: 1px; + margin: -1px; + border: 0; + padding: 0; + overflow: hidden +} + +@media all and (max-width: 1000px) { + .mw-ui-button.mw-ui-icon-element.mw-ui-icon-with-label-desktop { + color: transparent !important + } + + .mw-ui-button.mw-ui-icon-element span { + display: block; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + width: 1px; + height: 1px; + margin: -1px; + border: 0; + padding: 0; + overflow: hidden + } +} + +.mw-ui-button.mw-ui-quiet, .mw-ui-button.mw-ui-quiet.mw-ui-progressive, .mw-ui-button.mw-ui-quiet.mw-ui-destructive { + background-color: transparent; + color: #202122; + border-color: transparent; + font-weight: 700 +} + +.mw-ui-button.mw-ui-quiet:not(.mw-ui-icon-element), .mw-ui-button.mw-ui-quiet.mw-ui-progressive:not(.mw-ui-icon-element), .mw-ui-button.mw-ui-quiet.mw-ui-destructive:not(.mw-ui-icon-element) { + min-height: 32px +} + +input[type=checkbox]:hover + .mw-ui-button.mw-ui-quiet, input[type=checkbox]:hover + .mw-ui-button.mw-ui-quiet.mw-ui-progressive, input[type=checkbox]:hover + .mw-ui-button.mw-ui-quiet.mw-ui-destructive, .mw-ui-button.mw-ui-quiet:hover, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:hover, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:hover { + background-color: rgba(0, 24, 73, .02745098); + color: #202122; + border-color: transparent +} + +input[type=checkbox]:focus + .mw-ui-button.mw-ui-quiet, input[type=checkbox]:focus + .mw-ui-button.mw-ui-quiet.mw-ui-progressive, input[type=checkbox]:focus + .mw-ui-button.mw-ui-quiet.mw-ui-destructive, .mw-ui-button.mw-ui-quiet:focus, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:focus, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:focus { + color: #202122; + border-color: #36c; + box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff +} + +input[type=checkbox]:active + .mw-ui-button.mw-ui-quiet, input[type=checkbox]:active + .mw-ui-button.mw-ui-quiet.mw-ui-progressive, input[type=checkbox]:active + .mw-ui-button.mw-ui-quiet.mw-ui-destructive, .mw-ui-button.mw-ui-quiet:active, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:active, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:active { + background-color: rgba(0, 36, 73, .08235294); + color: #000; + border-color: #72777d; + box-shadow: none +} + +.mw-ui-button.mw-ui-quiet:disabled, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled, .mw-ui-button.mw-ui-quiet:disabled:hover, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled:hover, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled:hover, .mw-ui-button.mw-ui-quiet:disabled:active, .mw-ui-button.mw-ui-quiet.mw-ui-progressive:disabled:active, .mw-ui-button.mw-ui-quiet.mw-ui-destructive:disabled:active { + background-color: transparent; + color: #72777d; + border-color: transparent +} + +.mw-ui-button.mw-ui-progressive:not(:disabled) { + background-color: #36c; + color: #fff; + border-color: #36c +} + +.mw-ui-button.mw-ui-progressive:not(:disabled):hover { + background-color: #447ff5; + border-color: #447ff5 +} + +.mw-ui-button.mw-ui-progressive:not(:disabled):focus { + box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff +} + +.mw-ui-button.mw-ui-progressive:not(:disabled):active, .mw-ui-button.mw-ui-progressive:not(:disabled).is-on { + background-color: #2a4b8d; + border-color: #2a4b8d; + box-shadow: none +} + +.mw-ui-button.mw-ui-progressive:disabled { + background-color: #c8ccd1; + color: #fff; + border-color: #c8ccd1 +} + +.mw-ui-button.mw-ui-progressive.mw-ui-quiet { + color: #36c; + background-color: transparent; + border-color: transparent +} + +input[type=checkbox]:hover + .mw-ui-button.mw-ui-progressive.mw-ui-quiet, .mw-ui-button.mw-ui-progressive.mw-ui-quiet:hover { + background-color: rgba(52, 123, 255, .2); + border-color: transparent; + color: #447ff5 +} + +input[type=checkbox]:focus + .mw-ui-button.mw-ui-progressive.mw-ui-quiet, .mw-ui-button.mw-ui-progressive.mw-ui-quiet:focus { + color: #36c; + border-color: #36c +} + +input[type=checkbox]:active + .mw-ui-button.mw-ui-progressive.mw-ui-quiet, .mw-ui-button.mw-ui-progressive.mw-ui-quiet:active { + color: #fff; + background-color: #2a4b8d; + border-color: #2a4b8d +} + +.mw-ui-button.mw-ui-destructive:not(:disabled) { + background-color: #d33; + color: #fff; + border-color: #d33 +} + +.mw-ui-button.mw-ui-destructive:not(:disabled):hover { + background-color: #ff4242; + border-color: #ff4242 +} + +.mw-ui-button.mw-ui-destructive:not(:disabled):focus { + box-shadow: inset 0 0 0 1px #d33, inset 0 0 0 2px #fff +} + +.mw-ui-button.mw-ui-destructive:not(:disabled):active, .mw-ui-button.mw-ui-destructive:not(:disabled).is-on { + background-color: #b32424; + border-color: #b32424; + box-shadow: none +} + +.mw-ui-button.mw-ui-destructive:disabled { + background-color: #c8ccd1; + color: #fff; + border-color: #c8ccd1 +} + +.mw-ui-button.mw-ui-destructive.mw-ui-quiet { + color: #d33; + background-color: transparent; + border-color: transparent +} + +input[type=checkbox]:hover + .mw-ui-button.mw-ui-destructive.mw-ui-quiet, .mw-ui-button.mw-ui-destructive.mw-ui-quiet:hover { + background-color: rgba(209, 29, 19, .2); + border-color: transparent; + color: #ff4242 +} + +input[type=checkbox]:focus + .mw-ui-button.mw-ui-destructive.mw-ui-quiet, .mw-ui-button.mw-ui-destructive.mw-ui-quiet:focus { + color: #d33; + border-color: #d33 +} + +input[type=checkbox]:active + .mw-ui-button.mw-ui-destructive.mw-ui-quiet, .mw-ui-button.mw-ui-destructive.mw-ui-quiet:active { + color: #fff; + background-color: #b32424; + border-color: #b32424 +} + +.mw-ui-button.mw-ui-big { + font-size: 1.3em +} + +.mw-ui-button.mw-ui-block { + display: block; + width: 100%; + margin-left: auto; + margin-right: auto +} + +a.mw-ui-button { + text-decoration: none +} + +a.mw-ui-button:hover, a.mw-ui-button:focus { + text-decoration: none +} + +.mw-ui-button-group > * { + min-width: 48px; + border-radius: 0; + float: left +} + +.mw-ui-button-group > *:first-child { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px +} + +.mw-ui-button-group > *:not(:first-child) { + border-left: 0 +} + +.mw-ui-button-group > *:last-child { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px +} + +.mw-ui-button-group .is-on .button { + cursor: default +} + +.mw-ui-icon { + font-size: initial; + position: relative; + display: inline-block; + box-sizing: content-box !important; + width: 1.25em; + height: 1.25em; + min-width: 1.25em; + min-height: 1.25em; + flex-basis: 1.25em; + vertical-align: middle; + line-height: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + -moz-appearance: none; + -webkit-appearance: none; + background-color: transparent; + border: 0; + margin: 0; + padding: 0 +} + +.mw-ui-icon:before { + content: ''; + display: block; + width: 100%; + height: 100%; + min-width: 1.25em; + min-height: 1.25em; + background-repeat: no-repeat; + background-size: 1.25em 1.25em; + background-position: center +} + +.mw-ui-icon-flush-top { + margin-top: -.75em +} + +.mw-ui-icon-flush-left { + margin-left: -.75em +} + +.mw-ui-icon-flush-right { + margin-right: -.75em +} + +.mw-ui-icon-element { + border-radius: 2px; + padding: .75em; + -webkit-transition: background-color 100ms; + transition: background-color 100ms; + color: transparent +} + +.mw-ui-icon-element:focus, .mw-ui-icon-element:active, .mw-ui-icon-element:visited { + color: transparent +} + +.mw-ui-icon-element:active { + background-color: rgba(0, 0, 0, .03) +} + +@media (hover: hover) { + .mw-ui-icon-element:not(.disabled):hover { + background-color: rgba(0, 0, 0, .03) + } +} + +.mw-ui-icon-small { + width: 1em; + height: 1em; + min-width: 1em; + min-height: 1em; + flex-basis: 1em; + line-height: 1em +} + +.mw-ui-icon-small:before { + content: ''; + display: block; + width: 100%; + height: 100%; + min-width: 1em; + min-height: 1em; + background-repeat: no-repeat; + background-size: 1em 1em; + background-position: center +} + +.mw-ui-icon-small.mw-ui-icon-element { + padding: .5625em +} + +.mw-ui-icon-small.mw-ui-icon-flush-left { + margin-left: -.5625em +} + +.mw-ui-icon-small.mw-ui-icon-flush-right { + margin-right: -.5625em +} + +.mw-ui-icon-small.mw-ui-icon-before:before { + min-width: 1em; + min-height: 1em; + margin-right: .5625em +} + +.mw-ui-icon-before { + width: auto; + max-width: 100% +} + +.mw-ui-icon-before:before { + display: inline-block; + font-size: initial; + width: auto; + min-width: 1.25em; + min-height: 1.25em; + margin-right: 8px; + vertical-align: middle +} + +.mw-ui-icon-before span { + vertical-align: middle +} + +@media all and (min-width: 1000px) { + .mw-ui-icon-with-label-desktop { + color: #54595d; + width: auto; + line-height: inherit; + flex-basis: auto + } + + .mw-ui-icon-with-label-desktop:hover, .mw-ui-icon-with-label-desktop:focus, .mw-ui-icon-with-label-desktop:active, .mw-ui-icon-with-label-desktop:visited { + color: #54595d; + text-decoration: none + } + + .mw-ui-icon-with-label-desktop:before { + width: auto; + display: inline-block; + margin-right: 8px; + vertical-align: text-bottom + } +} + +.minerva__tab-container { + white-space: nowrap; + overflow-x: auto +} + +.minerva__tab-container .minerva__tab { + font-size: .85em; + margin: 0 10px 0 0; + color: #54595d; + font-weight: 700; + padding-bottom: 6px; + display: inline-block +} + +.minerva__tab-container .minerva__tab:visited, .minerva__tab-container .minerva__tab:hover, .minerva__tab-container .minerva__tab:active, .minerva__tab-container .minerva__tab.new, .minerva__tab-container .minerva__tab.new:visited, .minerva__tab-container .minerva__tab.new:active, .minerva__tab-container .minerva__tab.new:hover { + color: #54595d; + text-decoration: none +} + +.minerva__tab-container .minerva__tab:last-child { + margin-right: 0 +} + +.minerva__tab-container .minerva__tab.selected { + border-bottom: 2px solid #54595d +} + +.toggle-list__list--drop-down { + -webkit-transform: translateY(-8px); + -ms-transform: translateY(-8px); + transform: translateY(-8px); + -webkit-tap-highlight-color: transparent +} + +.minerva-animations-ready .toggle-list__list--drop-down { + -webkit-transition: opacity 100ms ease-in-out, -webkit-tap-highlight-color 0s ease-in-out, transform 100ms ease-in-out, visibility 100ms ease-in-out; + transition: opacity 100ms ease-in-out, -webkit-tap-highlight-color 0s ease-in-out, transform 100ms ease-in-out, visibility 100ms ease-in-out +} + +.toggle-list__checkbox:checked ~ .toggle-list__list--drop-down { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) +} + +.toggle-list-item { + display: block; + padding: .75em .875em +} + +.toggle-list-item:hover { + background: #eaecf0 +} + +.toggle-list-item__anchor { + display: block; + line-height: 1 +} + +.toggle-list-item__anchor:hover { + text-decoration: none +} + +.toggle-list-item__anchor:visited, .toggle-list-item__anchor:active { + color: #54595d +} + +.toggle-list-item__icon { + vertical-align: middle +} + +.toggle-list-item__label { + text-align: left; + color: #54595d; + font-weight: 700; + white-space: nowrap; + vertical-align: middle; + font-size: .875em +} + +.minerva-user-menu-list { + top: 100%; + right: -.75em; + min-width: 200px; + border-radius: 2px +} + +.minerva--history-page-action-enabled .page-actions-menu__list-item { + flex-basis: auto +} + +.minerva--history-page-action-enabled .page-actions-menu__list-item:first-child { + flex-grow: 0 +} + +.page-actions-overflow-list { + top: 100%; + right: -.75em; + border-radius: 2px +} + +.mw-ui-icon-minerva-ellipsis:before { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg) +} + +@media screen { + @counter-style meetei { + system: numeric; + symbols: '\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9'; + suffix: ') ' + } @counter-style santali { + system: numeric; + symbols: '\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59' +} ol:lang(azb) li, ol:lang(bcc) li, ol:lang(bgn) li, ol:lang(bqi) li, ol:lang(fa) li, ol:lang(glk) li, ol:lang(kk-arab) li, ol:lang(lrc) li, ol:lang(luz) li, ol:lang(mzn) li { + list-style-type: persian + } + + ol:lang(ckb) li, ol:lang(sdh) li { + list-style-type: arabic-indic + } + + ol:lang(hi) li, ol:lang(mai) li, ol:lang(mr) li, ol:lang(ne) li { + list-style-type: devanagari + } + + ol:lang(as) li, ol:lang(bn) li { + list-style-type: bengali + } + + ol:lang(mni) li { + list-style-type: meetei + } + + ol:lang(or) li { + list-style-type: oriya + } + + ol:lang(sat) li { + list-style-type: santali + } +} + +div, span, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, ins, em, img, small, strike, strong, sub, sup, tt, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, input, button, select, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; + background: 0 0 +} + +table, caption, tbody, tfoot, thead, tr, th, td { + font-size: 100% +} + +caption { + font-weight: 700 +} + +button { + border: 0; + background-color: transparent; + cursor: pointer +} + +input { + line-height: normal +} + +ul { + list-style: none +} + +table { + border-collapse: collapse +} + +html, body { + height: 100% +} + +html { + font-size: 100%; + -webkit-text-size-adjust: none +} + +body { + background-color: transparent; + color: #202122; + margin: 0 +} + +main { + display: block +} + +.mw-body { + border-top: 1px solid transparent; + padding-bottom: 32px +} + +.overlay-enabled, .mw-body { + background-color: transparent +} + +.header-container { + border-bottom: 1px solid #c8ccd1; + padding: 0 16px +} + +.header-container.header-chrome { + background-color: #eaecf0; + border: 0; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, .08) +} + +.navigation-drawer--loading, #footer-info-lastmod { + display: none +} + +.header { + display: table; + width: 100%; + border-spacing: 0; + border-collapse: collapse; + height: 3.375em; + white-space: nowrap; + border-top: 1px solid #c8ccd1; + margin-top: -1px +} + +.header > div, .header > .navigation-drawer { + position: relative; + vertical-align: middle; + display: table-cell +} + +.header > div a { + display: block +} + +.header .branding-box { + width: auto; + opacity: .66 +} + +.header .branding-box h1, .header .branding-box a { + margin-left: 5px; + font-size: 1em; + text-decoration: none; + color: #202122 +} + +.header .branding-box h1 span, .header .branding-box a span { + line-height: 1; + font-size: inherit +} + +.header .branding-box h1 img, .header .branding-box a img { + vertical-align: middle +} + +.header .branding-box h1 > *, .header .branding-box a > * { + float: left +} + +.header .branding-box h1 sup, .header .branding-box a sup { + color: #54595d; + display: none +} + +.beta .header .branding-box h1 sup, .beta .header .branding-box a sup { + display: initial +} + +.header > .header-title { + vertical-align: middle +} + +#searchInput { + cursor: text +} + +.search-box, .header .search-box { + display: none; + width: auto +} + +.search-box .search { + background-color: #fff; + background-position: left .5em center; + background-repeat: no-repeat; + background-size: 1.125em; + -webkit-appearance: none; + width: 100%; + margin-top: 0; + height: 2.25em; + border: 1px solid #fff; + border-radius: 2px; + padding: 7px 0 7px 2.0625em; + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + outline: 0; + -webkit-transition: border-color 250ms, box-shadow 250ms; + transition: border-color 250ms, box-shadow 250ms +} + +.client-nojs .search-box .search:focus, .search-overlay .search-box .search:focus { + border-color: #36c; + box-shadow: inset 0 0 0 1px #36c, 0 1px 1px rgba(0, 0, 0, .05) +} + +input.search::-webkit-search-decoration, input.search::-webkit-search-cancel-button, input.search::-webkit-search-results-button, input.search::-webkit-search-results-decoration { + display: none +} + +.content h2 { + clear: left +} + +.content .collapsible-heading .edit-page { + visibility: hidden +} + +.content .collapsible-heading.open-block .edit-page { + visibility: visible +} + +.content .mw-parser-output > h2, .content .section-heading { + border-bottom: 1px solid #eaecf0; + margin-bottom: .5em +} + +.content .mw-parser-output > h1, .content .mw-parser-output > h2, .content .mw-parser-output > h3, .content .mw-parser-output > h4, .content .mw-parser-output > h5, .content .section-heading, .content .in-block { + display: table +} + +.content .mw-parser-output > h1 .mw-headline, .content .mw-parser-output > h2 .mw-headline, .content .mw-parser-output > h3 .mw-headline, .content .mw-parser-output > h4 .mw-headline, .content .mw-parser-output > h5 .mw-headline, .content .section-heading .mw-headline, .content .in-block .mw-headline { + width: 100% +} + +.content .mw-parser-output > h1 > span, .content .mw-parser-output > h2 > span, .content .mw-parser-output > h3 > span, .content .mw-parser-output > h4 > span, .content .mw-parser-output > h5 > span, .content .section-heading > span, .content .in-block > span { + display: table-cell; + vertical-align: middle +} + +.content .mw-parser-output > h1 > .mw-editsection > .mw-ui-icon-element, .content .mw-parser-output > h2 > .mw-editsection > .mw-ui-icon-element, .content .mw-parser-output > h3 > .mw-editsection > .mw-ui-icon-element, .content .mw-parser-output > h4 > .mw-editsection > .mw-ui-icon-element, .content .mw-parser-output > h5 > .mw-editsection > .mw-ui-icon-element, .content .section-heading > .mw-editsection > .mw-ui-icon-element, .content .in-block > .mw-editsection > .mw-ui-icon-element { + margin-top: -.75em; + margin-bottom: -.75em +} + +.client-nojs .section-heading .indicator { + display: none +} + +#page-secondary-actions { + clear: both +} + +#page-secondary-actions a { + margin: 10px 2px 2px 0 +} + +#bodyContent .panel .content, .overlay .content-header, .overlay .panel, .page-list.side-list .list-thumb, .page-list li, .topic-title-list li, .site-link-list li, .drawer, .messagebox, .errorbox, .successbox, .warningbox, .list-header, .mw-revision { + padding-left: 16px; + padding-right: 16px +} + +.talk-overlay .comment .comment-content, .image-list, .pre-content, #mw-content-text > form > .oo-ui-fieldLayout > .oo-ui-fieldLayout-body, #mw-content-text > form > .oo-ui-widget, .content, .post-content { + margin: 0 16px +} + +.minerva__subtitle { + margin-top: 10px; + margin-bottom: 10px +} + +.minerva__subtitle:empty { + margin: 0 +} + +@media all and (min-width: 720px) { + .page-summary-list, .topic-title-list, .site-link-list, .overlay .panel, .list-header { + padding-left: 3.35em; + padding-right: 3.35em + } +} + +.heading-holder { + padding: 20px 0 0; + position: relative +} + +.heading-holder .tagline { + color: #54595d; + font-size: .85em +} + +.page-heading { + margin-bottom: 12px +} + +.mw-ui-icon-element.disabled, .language-selector.disabled { + cursor: default; + opacity: .25 +} + +#page-actions { + position: relative +} + +.page-actions-menu { + -moz-box-sizing: border-box; + box-sizing: border-box; + border-top: 1px solid #eaecf0; + border-bottom: 1px solid #c8ccd1; + margin-top: -1px +} + +.page-actions-menu__list { + display: flex; + height: 3em; + justify-content: space-between +} + +.page-actions-menu__list-item { + display: flex; + justify-content: flex-end; + align-items: center; + min-width: 0; + overflow: hidden +} + +.page-actions-menu__list-item > a { + font-weight: 500 +} + +.page-actions-menu__list-item li > *:hover { + box-shadow: none +} + +.page-actions-menu__list-item:first-child { + flex-grow: 1; + justify-content: flex-start; + margin-left: -8px +} + +.page-actions-menu__list-item:last-child { + margin-right: -8px +} + +.client-nojs .watch-this-article { + visibility: hidden +} + +.client-nojs .is-authenticated .watch-this-article { + visibility: visible +} + +@media all and (max-width: 320px -1) { + .client-nojs #page-actions { + display: none + } + + .client-nojs #section_0 { + border: 0 + } +} + +.minerva-user-navigation { + display: flex; + min-width: 7em; + min-height: 3.375em; + height: 100%; + width: 100%; + align-items: center; + justify-content: flex-end; + position: relative +} + +.minerva-user-navigation > *:last-child { + margin-right: -.75em +} + +.view-border-box *, .view-border-box { + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.client-js .mw-redirectedfrom, .printfooter, .jsonly { + display: none +} + +.client-js .jsonly { + display: inherit +} + +.hidden { + display: none !important +} + +#mw-mf-viewport { + position: relative; + height: 100% +} + +#mw-mf-page-center { + width: 100%; + min-height: 100%; + position: relative; + background-color: #eaecf0 +} + +.content { + position: relative; + z-index: 0 +} + +.minerva-footer { + border-top: solid 1px #c8ccd1; + overflow: auto; + padding-bottom: 6px +} + +.client-nojs footer .indicator, .client-nojs .mw-footer .indicator { + display: none +} + +footer .hlist li:after, .mw-footer .hlist li:after { + color: #36c +} + +footer > .post-content, .mw-footer > .post-content { + overflow: auto; + margin-top: 42px +} + +footer > .post-content > *, .mw-footer > .post-content > * { + margin-bottom: 9px +} + +footer > .post-content > h2, .mw-footer > .post-content > h2 { + border-bottom: solid 1px #c8ccd1; + padding-bottom: 10px; + margin-top: 42px; + font-size: 1em; + font-weight: 700 +} + +footer > .post-content > h2:first-child, .mw-footer > .post-content > h2:first-child { + margin-top: 0 +} + +footer > .post-content .hlist, .mw-footer > .post-content .hlist, footer > .post-content .license, .mw-footer > .post-content .license { + font-size: .875em +} + +.last-modified-bar { + border-bottom: solid 1px #c8ccd1; + background-color: #eaecf0; + color: #72777d; + padding-top: .75em; + padding-bottom: .75em; + font-size: .875em; + -webkit-transition: background-color 250ms, color 250ms; + transition: background-color 250ms, color 250ms +} + +.last-modified-bar a, .last-modified-bar a:visited { + color: #54595d +} + +.last-modified-bar a:nth-child(1), .last-modified-bar a:visited:nth-child(1) { + font-weight: 700 +} + +.last-modified-bar a.external { + background-image: none; + padding-right: 0 +} + +.last-modified-bar__content { + align-items: center; + display: -ms-flexbox; + display: flex +} + +.last-modified-bar__text { + padding-right: 3.5em; + padding-left: .75em; + line-height: 1.65; + vertical-align: middle; + flex-grow: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +@media (max-width: 720px) { + .last-modified-bar__text { + padding-right: 1em + } +} + +@media print { + .noprint, .banner-container, .header, .minerva__tab-container, .page-actions-menu, .post-content { + display: none + } + + h1, h2, h3, h4, h5, h6 { + page-break-after: avoid + } + + table, figure, img { + page-break-inside: avoid + } + + img { + max-width: 100% + } + + img.image-lazy-loaded { + -webkit-animation: none !important; + animation: none !important + } +} + +@media print and (max-device-width: 720px) { + @page { + margin: 50px 0 + } + + html { + padding: 0 50px + } + + .header-container, .header-container.header-chrome { + background: #fff; + box-shadow: none !important + } + + .header { + border-top: 0; + display: block; + height: auto; + padding: 0 16px + } + + .header .branding-box { + padding-left: 0 !important + } + + .header .branding-box sup { + display: none !important + } + + .header > nav, .header > div { + display: none !important + } + + .header > .branding-box { + height: auto; + display: block !important; + padding: 0 0 51px 50px + } + + .header > .branding-box h1 { + font-size: inherit + } + + .header > .branding-box h1 > * { + float: none + } + + .header > .branding-box h1 img { + height: 41px; + width: auto; + vertical-align: inherit + } + + .hatnote, .pre-content #page-actions { + display: none + } + + .pre-content { + display: block; + padding: 51px 0 35px + } + + .pre-content h1 { + font-size: 70px; + font-weight: 400; + font-style: italic; + font-stretch: normal; + line-height: normal; + letter-spacing: normal; + text-align: left; + color: #000 + } + + .pre-content .tagline { + font-size: 36px + } + + .mw-body > .content { + padding-top: 55px; + position: relative + } + + .mw-body > .content:before { + top: 0 + } + + .thumbinner { + width: auto !important + } + + .thumbinner > a { + width: 100% + } + + .thumb { + position: relative; + padding: 58px 0 !important; + text-align: left; + margin: 0 !important + } + + .thumb:after { + bottom: 30px + } + + .thumb:after, .mw-body > .content:before { + position: absolute; + left: 0; + content: ''; + display: block; + width: 55px; + height: 2px; + background: #999 + } + + .thumbcaption { + margin-top: 23px !important; + width: 100%; + font-style: italic; + font-size: 28px + } + + [class|=mw-content] { + font-size: 36px + } + + [class|=mw-content] a { + text-decoration: underline; + color: #202122 + } + + [class|=mw-content] blockquote { + color: #54595d; + padding: 5px 39px; + font-style: italic + } + + [class|=mw-content] .section-heading { + border-bottom: 0; + padding-bottom: 0; + margin-bottom: 16px + } + + [class|=mw-content] h2 { + font-size: 48px + } + + [class|=mw-content] h3 { + font-size: 40px; + margin-bottom: 13px + } + + [class|=mw-content] h4, [class|=mw-content] h5, [class|=mw-content] h6 { + font-size: 36px; + margin-bottom: 12px + } + + [class|=mw-content] .wikitable { + font-size: 16px + } + + [class|=mw-content] .infobox { + font-size: 30px + } + + .references .mw-cite-backlink { + display: none + } + + .references .reference-text { + font-style: italic + } + + .references a { + text-decoration: none + } + + .references .external.text { + background-image: none + } + + .printfooter { + display: block; + padding-top: 108px; + font-size: 30px + } + + #mw-mf-page-center > footer { + border-top: solid 4px #000; + padding-top: 23px; + background: #fff !important + } + + #mw-mf-page-center > footer .mw-ui-icon:before { + display: none !important + } + + #mw-mf-page-center > footer .last-modified-bar { + background: 0 0 !important; + border: 0 !important + } + + #mw-mf-page-center > footer .last-modifier-tagline { + font-size: 36px; + padding-top: 0 !important; + padding-bottom: 16px !important + } + + #mw-mf-page-center > footer .last-modified-bar, #mw-mf-page-center > footer .last-modified-bar a { + font-weight: 700 !important; + color: #000 !important + } + + #mw-mf-page-center > footer .post-content { + margin-top: 15px !important; + display: block + } + + #mw-mf-page-center > footer .post-content .hlist, #mw-mf-page-center > footer .post-content h2 { + display: none + } + + #mw-mf-page-center > footer .post-content .license a, #mw-mf-page-center > footer .post-content .license { + font-size: 30px; + color: #999; + font-weight: 400 + } +} + +@font-face { + font-family: raleway; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCFPrEHJA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F +} + +@font-face { + font-family: raleway; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCMPrEHJA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116 +} + +@font-face { + font-family: raleway; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCHPrEHJA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB +} + +@font-face { + font-family: raleway; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: raleway; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/raleway/v22/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBRrPtMoH62xUZCyrg2Wi_FBw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBRrPtMoH62xUZCyrg4Wi8.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKAKkvcwr4Pro.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKAKkvfQr4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKZKovcwr4Pro.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKZKovfQr4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBTrPtMoH62xUZCwYg6Qis.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBTrPtMoH62xUZCz4g6.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKdK0vcwr4Pro.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKdK0vfQr4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKaK4vcwr4Pro.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF +} + +@font-face { + font-family: neuton; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/neuton/v16/UMBQrPtMoH62xUZKaK4vfQr4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} + +@media screen and (min-width: 1000px) { + .header { + max-width: 1250px !important + } +} + +.banner-container, .header, .page-header-bar, .overlay-header, .content, .overlay-content, .content-unstyled, .pre-content, .post-content, .last-modified-bar, #mw-content-text > form { + max-width: 1250px !important +} + +.page-Main_Page .page-heading, .page-Main_Page .pre-content { + display: none !important +} + +.page-Main_Page pre { + display: none +} + +.page-Main_Page .blocks-list { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + list-style: none; + column-gap: 20px; + row-gap: 20px; + padding: 0; + margin: 0 +} + +.page-Main_Page .blocks-item { + box-sizing: border-box; + color: #ffc376; + display: flex; + flex: 1 0 180px; + text-align: center; + margin: 0 !important; + border: 1px solid #ecebeb; + border-radius: 8px; + box-shadow: 0 2px 15px rgba(175, 175, 175, .2); + flex-flow: wrap; + position: relative +} + +.page-Main_Page .blocks-item:hover { + box-shadow: 0 2px 15px rgba(231, 135, 27, .4) !important; + cursor: pointer; + top: -2px +} + +.page-Main_Page .blocks-item > a { + color: #ffc376; + padding: 0 10px 15px; + display: flex; + flex-direction: column; + flex: 1; + justify-content: center; + border-radius: inherit; + text-decoration: none; + background-color: transparent +} + +.page-Main_Page .block-icon { + background-position: top center; + background-repeat: no-repeat; + background-size: contain; + height: 140px; + margin: 0; + transition: all .1s ease-in-out +} + +.page-Main_Page .blocks-item-title { + margin: 0; + font-size: 22px; + color: #ffc376 +} + +.page-Main_Page .blocks-item-description:not(:empty) { + margin-top: 10px +} + +.page-Main_Page .blocks-item-description { + font-weight: 300; + margin: 0; + color: #1a1a1a +} + +.page-Main_Page .block-icon:before { + content: ""; + display: block; + position: relative +} + +.page-Main_Page .blocks-item#block-accessories > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.png) 2x) +} + +.page-Main_Page .blocks-item#block-accessories > a > .block-icon:before, .page-Main_Page .blocks-item#block-accessories:hover > a > .block-icon, .page-Main_Page .blocks-item#block-accessories > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/accessories.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/accessories.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-armor > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.png) 2x) +} + +.page-Main_Page .blocks-item#block-armor > a > .block-icon:before, .page-Main_Page .blocks-item#block-armor:hover > a > .block-icon, .page-Main_Page .blocks-item#block-armor > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/armor.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/armor.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-collections > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.png) 2x) +} + +.page-Main_Page .blocks-item#block-collections > a > .block-icon:before, .page-Main_Page .blocks-item#block-collections:hover > a > .block-icon, .page-Main_Page .blocks-item#block-collections > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/collections.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/collections.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-hub > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.png) 2x) +} + +.page-Main_Page .blocks-item#block-hub > a > .block-icon:before, .page-Main_Page .blocks-item#block-hub:hover > a > .block-icon, .page-Main_Page .blocks-item#block-hub > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/hub.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/hub.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-fairysouls > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.png) 2x) +} + +.page-Main_Page .blocks-item#block-fairysouls > a > .block-icon:before, .page-Main_Page .blocks-item#block-fairysouls:hover > a > .block-icon, .page-Main_Page .blocks-item#block-fairysouls > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/fairysouls.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/fairysouls.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-island > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.png) 2x) +} + +.page-Main_Page .blocks-item#block-island > a > .block-icon:before, .page-Main_Page .blocks-item#block-island:hover > a > .block-icon, .page-Main_Page .blocks-item#block-island > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/island.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/island.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-locations > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.png) 2x) +} + +.page-Main_Page .blocks-item#block-locations > a > .block-icon:before, .page-Main_Page .blocks-item#block-locations:hover > a > .block-icon, .page-Main_Page .blocks-item#block-locations > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/locations.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/locations.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-minions > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.png) 2x) +} + +.page-Main_Page .blocks-item#block-minions > a > .block-icon:before, .page-Main_Page .blocks-item#block-minions:hover > a > .block-icon, .page-Main_Page .blocks-item#block-minions > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/minions.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/minions.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-pets > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.png) 2x) +} + +.page-Main_Page .blocks-item#block-pets > a > .block-icon:before, .page-Main_Page .blocks-item#block-pets:hover > a > .block-icon, .page-Main_Page .blocks-item#block-pets > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/pets.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/pets.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-reforging > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.png) 2x) +} + +.page-Main_Page .blocks-item#block-reforging > a > .block-icon:before, .page-Main_Page .blocks-item#block-reforging:hover > a > .block-icon, .page-Main_Page .blocks-item#block-reforging > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/reforging.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/reforging.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-skills > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.png) 2x) +} + +.page-Main_Page .blocks-item#block-skills > a > .block-icon:before, .page-Main_Page .blocks-item#block-skills:hover > a > .block-icon, .page-Main_Page .blocks-item#block-skills > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/skills.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/skills.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-stats > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.png) 2x) +} + +.page-Main_Page .blocks-item#block-stats > a > .block-icon:before, .page-Main_Page .blocks-item#block-stats:hover > a > .block-icon, .page-Main_Page .blocks-item#block-stats > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/stats.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/stats.ro.png) 2x) +} + +.page-Main_Page .blocks-item#block-weapons > a > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.png) 2x) +} + +.page-Main_Page .blocks-item#block-weapons > a > .block-icon:before, .page-Main_Page .blocks-item#block-weapons:hover > a > .block-icon, .page-Main_Page .blocks-item#block-weapons > a:focus > .block-icon { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png); + background-image: image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.ro.png) 2x); + background-image: -webkit-image-set(url(https://wiki.hypixel.net/images/hypixel/icons/low-res/weapons.ro.png) 1x, url(https://wiki.hypixel.net/images/hypixel/icons/hi-res/weapons.ro.png) 2x) +} + +.page-Main_Page #wrapper { + display: flex; + flex-direction: row; + column-gap: 50px; + row-gap: 50px; + justify-content: space-between +} + +.page-Main_Page #wrapper #content { + display: flex; + flex-direction: column; + row-gap: 50px +} + +.page-Main_Page #wrapper #content #introduction { + display: flex; + flex-direction: row; + column-gap: 25px; + row-gap: 25px; + align-content: center +} + +.page-Main_Page #wrapper #content #introduction #welcome { + margin: .5em 0 +} + +.page-Main_Page #wrapper #content #introduction .blocks-item { + margin: 0 !important +} + +.page-Main_Page #wrapper #content #statistics .stats-list { + display: flex; + flex-wrap: wrap; + list-style: none; + justify-content: space-evenly; + padding: 0; + row-gap: 25px +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item { + margin: 0 +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon { + background-position: center; + background-size: contain; + background-repeat: no-repeat; + height: 55px; + width: 55px; + display: inline-block; + position: relative; + vertical-align: middle +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-edits { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/edits.png) +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-pages { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/pages.png) +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-icon.stats-icon-files { + background-image: url(https://wiki.hypixel.net/images/hypixel/icons/files.png) +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text { + vertical-align: middle; + display: inline-flex; + position: relative; + flex-direction: column; + flex-wrap: nowrap; + justify-content: center; + align-content: center; + margin: 0 15px +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text span:first-child { + font-size: 20px +} + +.page-Main_Page #wrapper #content #statistics .stats-list .stats-item .stats-item-text span:nth-child(2) { + font-size: 16px +} + +.page-Main_Page #wrapper #content #other-game-content ul { + columns: 200px auto +} + +.page-Main_Page #wrapper #content .content-heading { + height: 50px; + background-color: #1f1f1f; + border: 1px solid #333; + border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat !important; + border-image-width: 35px !important; + border-image-outset: 2px !important; + margin: 0 0 1em; + font-size: 20px; + display: flex; + justify-content: center; + align-items: center +} + +.page-Main_Page #wrapper #sidebar { + display: flex; + flex-direction: column; + row-gap: 50px +} + +.page-Main_Page #wrapper #sidebar .sidebar-heading { + text-align: center; + font-size: 20px +} + +.page-Main_Page #wrapper #sidebar .sidebar-content { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + row-gap: 15px; + background-color: #1f1f1f; + padding: 20px; + border-radius: 3px; + border: 1px solid #333; + border-image: url(https://wiki.hypixel.net/images/hypixel/borders/square_border.png) 500 500 repeat; + border-image-width: 35px !important; + border-image-outset: 2px !important +} + +.page-Main_Page #wrapper #sidebar #clock { + display: none +} + +.page-Main_Page #wrapper #sidebar #clock p { + text-align: center; + margin: 0 +} + +.page-Main_Page #wrapper #sidebar #clock #clock-time { + font-size: 2em +} + +.page-Main_Page #wrapper #sidebar #clock #clock-date { + font-size: 1em +} + +@media (max-width: 1000px) { + #wrapper { + flex-wrap: wrap + } +} + +@media (max-width: 720px) { + #introduction { + flex-wrap: wrap; + justify-content: center + } + + .stats-list { + flex-direction: column; + align-content: center + } +} + +.mw-ui-button.mw-ui-progressive { + background-color: #e7871b; + color: #fff; + border: 1px solid #e7871b +} + +.oo-ui-panelLayout-framed { + background-color: #eaecf0 !important; + border-radius: 4px; + border: none !important +} + +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled { + background-color: transparent +} + +ul.mw-contributions-list li { + min-height: 0 !important +} + +ul.special li { + min-height: 0 !important +} + +body { + color: transparent; + background-color: transparent; + font-family: Raleway, helvetica, serif !important +} + +#content h1, #content h2, #content h3 { + font-family: Neuton, Raleway, helvetica, serif !important +} + +html, #mw-mf-page-center, #mw-script-doc, #content, .navbox, .navbox-subgroup, .overlay.search-overlay { + background-color: #fff !important +} + +.overlay.search-overlay { + background-color: #fff !important +} + +.overlay.search-overlay .search-box { + display: block !important; + position: relative !important +} + +a.external { + background-image: none !important; + padding-right: 0 !important +} + +.mw-body h2.list-header { + margin-top: 16px +} + +.page-heading > h1 { + font-size: 1.7em !important; + font-weight: 400 !important; + line-height: 1.3; + word-wrap: break-word; + word-break: break-word +} + +.list-header { + background-color: transparent; + color: inherit +} + +#toc ul { + list-style: decimal +} + +#mw-toc-heading::before { + background-image: url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJsaXN0IiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtbGlzdCBmYS13LTE2IiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04MCAzNjhIMTZhMTYgMTYgMCAwIDAtMTYgMTZ2NjRhMTYgMTYgMCAwIDAgMTYgMTZoNjRhMTYgMTYgMCAwIDAgMTYtMTZ2LTY0YTE2IDE2IDAgMCAwLTE2LTE2em0wLTMyMEgxNkExNiAxNiAwIDAgMCAwIDY0djY0YTE2IDE2IDAgMCAwIDE2IDE2aDY0YTE2IDE2IDAgMCAwIDE2LTE2VjY0YTE2IDE2IDAgMCAwLTE2LTE2em0wIDE2MEgxNmExNiAxNiAwIDAgMC0xNiAxNnY2NGExNiAxNiAwIDAgMCAxNiAxNmg2NGExNiAxNiAwIDAgMCAxNi0xNnYtNjRhMTYgMTYgMCAwIDAtMTYtMTZ6bTQxNiAxNzZIMTc2YTE2IDE2IDAgMCAwLTE2IDE2djMyYTE2IDE2IDAgMCAwIDE2IDE2aDMyMGExNiAxNiAwIDAgMCAxNi0xNnYtMzJhMTYgMTYgMCAwIDAtMTYtMTZ6bTAtMzIwSDE3NmExNiAxNiAwIDAgMC0xNiAxNnYzMmExNiAxNiAwIDAgMCAxNiAxNmgzMjBhMTYgMTYgMCAwIDAgMTYtMTZWODBhMTYgMTYgMCAwIDAtMTYtMTZ6bTAgMTYwSDE3NmExNiAxNiAwIDAgMC0xNiAxNnYzMmExNiAxNiAwIDAgMCAxNiAxNmgzMjBhMTYgMTYgMCAwIDAgMTYtMTZ2LTMyYTE2IDE2IDAgMCAwLTE2LTE2eiI+PC9wYXRoPjwvc3ZnPg==); + content: ""; + float: left; + height: 14px; + left: -14px; + position: relative; + top: 5px; + width: 14px +} + +#footer-company { + padding: 0 50px 0 0 +} + +#footer-links { + display: flex; + flex: 1; + flex-direction: column; + flex-wrap: wrap; + font-size: 15px; + max-height: 120px +} + +#footer-links > li { + padding: 4px 10px +} + +#footer-logo { + max-height: 64px +} + +#footer-socials { + font-size: 16px; + vertical-align: top; + color: gray; + display: block; + padding: 0 4px +} + +#footer-socials .fab { + min-width: 18px; + text-align: center; + vertical-align: middle +} + +#footer-socials a:hover { + color: gray !important +} + +#footer-socials a:hover > .fa-discord { + color: #7289da +} + +#footer-socials a:hover > .fa-facebook { + color: #4267b2 +} + +#footer-socials a:hover > .fa-instagram { + color: #405de6 +} + +#footer-socials a:hover > .fa-tiktok { + color: #000 +} + +#footer-socials a:hover > .fa-twitter { + color: #1da1f2 +} + +#footer-socials a:hover > .fa-youtube { + color: red +} + +#mw-content-text > form { + width: 100% !important +} + +.branding-box { + background: url(https://wiki.hypixel.net/images/hypixel-full.png) no-repeat; + background-origin: content-box; + background-size: contain; + background-position: center; + opacity: 1 !important; + padding: 10px 0; + cursor: pointer; + height: 100% +} + +.branding-box > a { + height: 100%; + width: 100% +} + +.branding-box > a > span { + color: transparent +} + +.client-nojs .search-box .search:focus { + border: none; + box-shadow: none +} + +.search-overlay .search-box .search:focus { + border: none; + box-shadow: none +} + +.toggle-list__toggle, #mw-mf-main-menu-button { + border: none; + box-shadow: none; + outline: none !important +} + +.footer { + background-image: linear-gradient(to bottom, rgba(26, 26, 26, 0.92), #1a1a1a), url(https://wiki.hypixel.net/images/artwork.png); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + border-top: 1px solid #ddd; + color: #fff; + margin-top: 60px; + padding: 30px 0; + user-select: none +} + +.footer a { + color: gray !important; + text-decoration: none !important; + transition: .12s ease-in-out +} + +.footer a:hover { + color: #fff !important +} + +.footer-copyright { + color: gray; + display: block; + padding: 0 4px +} + +.footer-inner { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin: 0 auto; + max-width: 1160px; + padding: 0 !important; + width: 65% !important +} + +.header { + height: 71px !important; + user-select: none +} + +.header-chrome:before { + background-image: radial-gradient(farthest-side at top, rgba(255, 255, 255, 0.5), #ffffff), url(https://wiki.hypixel.net/images/artwork.png) !important; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + content: ""; + height: 72px; + left: 0; + max-width: 100% !important; + position: absolute; + width: 100% !important +} + +.last-modified-bar { + margin: auto; + width: 90%; + background-color: #eaecf0 !important; + border-radius: 4px +} + +.minerva__tab.selected { + border-bottom: 2px solid #e7871b !important +} + +.mw-editform .editOptions { + margin-top: 20px +} + +.mw-ui-icon-element.cancel { + height: 44px; + margin: 10px; + padding: 0; + vertical-align: middle; + width: 44px +} + +.mw-ui-icon-element:not(.disabled):hover { + background-color: rgba(0, 0, 0, .1) +} + +.overlay-footer-container { + display: none +} + +.overlay.search-overlay.visible { + animation-duration: .1s !important +} + +.minerva__tab-container { + display: none +} + +.page-actions-menu, #filetoc, .warningbox { + border-radius: 4px; + margin-bottom: 16px; + padding: 0 20px; + background-color: #eaecf0; + border: 1px solid #c8ccd1 +} + +.warningbox { + padding: 10px 25px !important +} + +.warningbox, #mw-clearyourcache { + margin-bottom: 16px !important +} + +.search { + -webkit-appearance: none !important; + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=original&skin=minerva&version=1qbws); + background-position: left .8em center !important; + background-size: 18px !important; + border: 1px solid #fff !important; + border-radius: 6px !important; + box-shadow: 0 0 10px #bbb !important; + box-sizing: border-box !important; + color: #666 !important; + font-family: BlinkMacSystemFont, segoe ui, helvetica, Arial, sans-serif !important; + font-size: 14px !important; + height: 40px !important; + line-height: 1.15 !important; + max-width: 380px; + padding-left: 40px !important; + padding-right: 20px !important; + transition: border .12s ease-in-out !important; + width: 100% !important +} + +.search:focus { + outline: 1px solid #ffc376 !important +} + +.search-box .search { + border-radius: 4px +} + +.content kbd { + border-radius: 4px +} + +.content samp { + border-radius: 4px +} + +.content code { + border-radius: 4px +} + +.content pre { + border-radius: 4px +} + +footer { + border: none !important +} + +fieldset { + margin: 10px 0 +} + +#mw-mf-page-left { + box-shadow: 0 5px 17px 0 rgba(0, 0, 0, .24), 0 0 1px #a2a9b1 !important; + position: absolute !important; + height: max-content; + border-radius: 3px; + -webkit-transition: opacity 100ms ease-in-out, -webkit-tap-highlight-color 0s ease-in-out, transform 100ms ease-in-out, visibility 100ms ease-in-out !important; + transition: opacity 100ms ease-in-out, -webkit-tap-highlight-color 0s ease-in-out, transform 100ms ease-in-out, visibility 100ms ease-in-out !important; + top: 45px !important; + left: -12px !important; + transform: translate(0, -10px) !important +} + +#mw-mf-page-left li { + border: none !important +} + +#mw-mf-page-left li:hover { + background-color: #eaecf0 !important +} + +#mw-mf-page-left ul { + padding-bottom: 0 !important +} + +#mw-mf-page-left ul li a { + color: #54595d !important +} + +#mw-mf-page-left ul li a:hover { + box-shadow: none !important +} + +form.search-box { + display: block; + width: 100% +} + +input { + outline: none +} + +#main-menu-input:checked ~ #mw-mf-page-left { + transform: translate(0, 0) !important +} + +.hlist { + display: none +} + +.last-modified-bar.active { + background-color: #218e47 !important +} + +.wikitable > tr > th, .wikitable > tr > td, .wikitable > * > tr > th, .wikitable > * > tr > td { + padding: .25em .55em !important +} + +.suggestions { + border-radius: 6px !important +} + +.suggestions-result, .suggestions-special { + padding: .5em 1em !important +} + +.suggestions-results, .suggestions-special { + border-color: #ccc !important +} + +kbd, samp, code, pre, .page-actions-menu, #filetoc, .warningbox, .last-modified-bar { + border: 1px solid #333; + border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat !important; + border-image-width: 35px !important; + border-image-outset: 2px !important +} + +@media only screen { + .oo-ui-tabOptionWidget { + color: #fff !important + } + + .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected { + background-color: #212121 + } + + .suggestions-results, .suggestions-special { + background-color: #1f1f1f !important; + border-color: #333 !important + } + + .suggestions-results .special-label, .suggestions-special .special-label { + color: #ccc !important + } + + .suggestions-results .suggestions-result, .suggestions-special .suggestions-result, .suggestions-results .special-query, .suggestions-special .special-query { + color: #fff !important + } + + .search { + color: #ccc !important + } + + html, body, #mw-mf-page-center, #mw-script-doc, #content, .navbox, .navbox-subgroup, .overlay.search-overlay, .oo-ui-tabSelectWidget-framed, .oo-ui-tagMultiselectWidget-handle, .mw-prefs-buttons, .mw-scribunto-message, .mw-scribunto-console-fieldset, .mw-history-compareselectedversions { + background-color: transparent !important; + color: #fff + } + + .mw-rcfilters-ui-watchlistTopSectionWidget-separator { + border-color: #212121 !important + } + + .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-content-title, .mw-rcfilters-ui-filterTagMultiselectWidget-emptyFilters { + color: #fff !important + } + + .oo-ui-tabSelectWidget-framed { + border-bottom-color: transparent + } + + .oo-ui-tagMultiselectWidget-handle, .oo-ui-buttonGroupWidget, .oo-ui-dropdownWidget-handle, .oo-ui-optionWidget, .oo-ui-selectWidget, .oo-ui-optionWidget-selected { + background-color: #1a1a1a !important; + color: #fff !important; + border-color: #212121 !important + } + + .oo-ui-optionWidget-highlighted { + background-color: #212121 !important + } + + .oo-ui-optionWidget-selected { + background-color: #1f1f1f !important + } + + input, select, .oo-ui-buttonElement-button, #mw-scribunto-input, .diff-context { + color: #fff !important; + background-color: #1f1f1f !important; + border: 1px solid #333 !important + } + + legend { + color: #aaa + } + + .content .mw-parser-output > h2 { + border-bottom: 2px solid #333 + } + + .content .mw-parser-output > h3 { + border-bottom: 1px solid #333; + margin-bottom: .5em + } + + .content .section-heading { + border-bottom: 1px solid #aaa + } + + .content kbd, .content samp, .content code, .content pre, .content .toc, .content .infobox { + background-color: #1f1f1f !important; + border-color: #333 !important + } + + .content .infobox td { + border-color: #333 !important + } + + .infobox tr { + color: #fff !important + } + + table.wikitable > tr > th, table.wikitable > tr > td { + background-color: #212121; + border-color: #333 !important + } + + table.wikitable > tr > th { + background-color: #2b2b2b + } + + table.wikitable > tr:nth-child(odd) > td { + background: #2b2b2b + } + + table.wikitable > * > tr > th, table.wikitable > * > tr > td { + background-color: #212121; + border-color: #333 !important + } + + table.wikitable > * > tr > th { + background-color: #2b2b2b + } + + table.wikitable > * > tr:nth-child(odd) > td { + background: #2b2b2b + } + + .mw-datatable > tr > th, .mw_metadata > tr > th, .mw-datatable > tr > td, .mw_metadata > tr > td { + background-color: #212121 !important; + border-color: #333 !important + } + + .mw-datatable > tr > th, .mw_metadata > tr > th { + background-color: #2b2b2b !important + } + + .mw-datatable > * > tr > th, .mw_metadata > * > tr > th, .mw-datatable > * > tr > td, .mw_metadata > * > tr > td { + background-color: #212121 !important; + border-color: #333 !important + } + + .mw-datatable > * > tr > th, .mw_metadata > * > tr > th { + background-color: #2b2b2b !important + } + + .footer { + background-image: linear-gradient(to bottom, rgba(26, 26, 26, 0.85), #1a1a1a), url(https://wiki.hypixel.net/images/artwork.png); + border-top: 1px solid #1a1a1a + } + + .header-chrome:before { + background-image: radial-gradient(farthest-side at top, rgba(26, 26, 26, 0.5), #1a1a1a), url(https://wiki.hypixel.net/images/artwork.png) !important + } + + .oo-ui-iconElement-icon, .oo-ui-indicatorElement-indicator { + filter: invert(1) hue-rotate(180deg) brightness(1.2) + } + + .mw-ui-icon:not(.mw-ui-icon-wikimedia-history-invert):before { + filter: invert(1) hue-rotate(180deg) brightness(1.2) + } + + .mw-ui-icon:not(.mw-ui-icon-mf-expand-invert):before { + filter: invert(1) hue-rotate(180deg) brightness(1.2) + } + + .last-modified-bar { + background-color: #1f1f1f !important + } + + .last-modified-bar .last-modified-bar__text { + color: #fff !important + } + + .oo-ui-panelLayout-framed { + background-color: #1f1f1f !important + } + + .minerva__tab { + color: #aaa !important + } + + .mw-ui-icon-with-label-desktop:hover, .mw-ui-icon-with-label-desktop:focus, .mw-ui-icon-with-label-desktop:active, .mw-ui-icon-with-label-desktop:visited { + color: #aaa !important + } + + .page-heading > h1, .page-heading > .tagline { + color: #fff !important + } + + .toggle-list__list { + color: #fff !important; + background-color: #1f1f1f !important; + box-shadow: 0 5px 17px 0 rgba(0, 0, 0, .24), 0 0 1px #000 !important; + border: 1px solid #333 + } + + .search { + box-shadow: 0 0 10px #1f1f1f !important + } + + .search, .page-actions-menu, #filetoc, .warningbox { + background-color: #1f1f1f !important; + border-color: #333 !important + } + + .toggle-list-item:hover { + background: #000; + color: #fff + } + + .blocks-item-description, .mw-mf-user { + color: #fff !important + } + + .blocks-item { + box-shadow: 0 2px 15px rgba(35, 35, 35, .5) !important; + border: 1px solid #333 !important; + background-color: #212121 + } + + .mw-ui-button { + background-color: #1f1f1f !important; + border: 1px solid #333 !important; + color: #fff !important + } + + .mw-ui-button:hover { + background-color: #212121 !important + } + + .mw-history-undo a, .mw-rollback-link a { + background-color: #1f1f1f !important; + border: 1px solid #333 !important; + color: #fff !important + } + + .mw-history-undo a:hover, .mw-rollback-link a:hover { + background-color: #212121 !important + } + + .toggle-list-item__label { + color: #aaa !important + } + + .page-list .info, .page-list .component { + color: #aaa !important + } + + .page-list li { + border-color: #333 !important + } + + .topic-title-list .info, .topic-title-list .component { + color: #aaa !important + } + + .topic-title-list li { + border-color: #333 !important + } + + .site-link-list .info, .site-link-list .component { + color: #aaa !important + } + + .site-link-list li { + border-color: #333 !important + } + + .page-list.side-list .list-thumb { + color: #aaa !important + } + + .topic-title-list.side-list .list-thumb { + color: #aaa !important + } + + .site-link-list.side-list .list-thumb { + color: #aaa !important + } + + ul.mw-contributions-list li { + border-color: #1f1f1f !important + } + + ul.special li { + border-color: #1f1f1f !important + } + + .ns-special .content-header { + border-color: #1f1f1f !important + } + + .mw-prefs-buttons { + border-color: #1f1f1f !important + } + + #mw-mf-page-left { + box-shadow: 0 5px 17px 0 rgba(0, 0, 0, .24), 0 0 1px #000 !important + } + + #mw-mf-page-left ul li { + background-color: #1f1f1f !important; + color: #fff !important + } + + #mw-mf-page-left ul li a { + color: #aaa !important + } + + #mw-mf-page-left li:hover { + background-color: #000 !important + } + + .mw-ui-icon-element:not(.disabled):hover { + background-color: rgba(0, 0, 0, .4) + } +} + +@media only screen and (min-width: 720px) { + .header .branding-box { + width: auto !important; + min-width: 82px + } + + .overlay.search-overlay .overlay-title { + padding-left: 236px !important; + width: 380px !important + } + + #page-actions a { + color: #fff !important + } + + #page-actions label { + color: #fff !important + } +} + +@media only screen and (max-width: 720px) { + #footer-company { + padding: 0 0 30px; + text-align: center; + width: 100% + } + + #footer-links { + max-height: 100%; + text-align: center + } + + .header-chrome:before { + background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.5), #ffffff), url(https://wiki.hypixel.net/images/artwork.png) !important; + height: 170px !important + } + + .last-modified-bar { + margin: 0 16px + } + + .header-chrome:before { + background-image: linear-gradient(to bottom, rgba(26, 26, 26, 0.5), #1a1a1a), url(https://wiki.hypixel.net/images/artwork.png) !important + } +} + +@media only screen and (min-width: 1000px) { + .footer-inner { + padding: 0; + width: 90% + } +} + +@media only screen and (max-width: 1000px) { + #footer-links { + max-width: 100% + } + + .footer-inner { + padding: 0 5% !important; + width: calc(90%) !important + } +} + +.infobox { + border: 15px solid #232445 !important; + border-image: url(https://wiki.hypixel.net/images/hypixel/borders/square_border.png) 1000 1000 repeat !important; + border-image-width: 100px !important; + border-image-outset: 2px !important; + border-collapse: separate !important +} + +.infobox { + background-color: #f2f2f2; + border-collapse: collapse; + clear: both; + display: table !important; + float: right; + margin: 0 !important; + margin-left: 20px !important; + width: 320px; + margin-bottom: 15px !important; + table-layout: fixed +} + +.infobox table { + border-collapse: inherit !important +} + +.infobox img { + display: block; + margin: 20px auto; + max-width: 150px; + height: auto +} + +.infobox td { + border-top: 1px solid #c7c7c7; + padding: 2px 8px; + text-align: right +} + +.infobox td:first-of-type { + font-weight: 700; + text-align: left +} + +.infobox td:last-child { + float: right; + width: 100%; + text-align: right +} + +.infobox tr:first-of-type > th { + font-size: 16px; + font-weight: 700; + padding: 10px 0; + text-align: center +} + +.infobox.minor { + border-image-width: 0 100px 100px 100px !important; + border-width: 0 15px 15px !important; + margin-top: -15px !important +} + +.infobox tr:first-of-type > td { + border-top: none +} + +.mw-parser-output .infobox:last-of-type { + margin-bottom: 15px +} + +span.color-divine, span.color-light_blue, span.color-aqua { + color: #5ff !important +} + +span.color-black { + color: #000 !important +} + +span.color-rare, span.color-blue { + color: #55f !important +} + +span.color-dark_aqua { + color: #0aa !important +} + +span.color-dark_blue { + color: #00a !important +} + +span.color-dark_gray { + color: #555 !important +} + +span.color-dark_green { + color: #0a0 !important +} + +span.color-epic, span.color-dark_purple { + color: #a0a !important +} + +span.color-dark_red { + color: #a00 !important +} + +span.color-legendary, span.color-orange, span.color-gold { + color: #fa0 !important +} + +span.color-gray { + color: #aaa !important +} + +span.color-uncommon, span.color-green { + color: #5f5 !important +} + +span.color-pink, span.color-mythic, span.color-light_purple { + color: #f5f !important +} + +span.color-supreme, span.color-special, span.color-very-special, span.color-red { + color: #f55 !important +} + +span.color-common, span.color-white { + color: #fff !important +} + +span.color-yellow { + color: #ff5 !important +} + +.tabber__header__prev:after, .tabber__header__next:after { + filter: invert(1) +} + +:not(.infobox) .tabber__tab--active { + background-color: rgba(51, 102, 204, .2) +} + +:not(.infobox) .tabber__panel, :not(.infobox) .tabber__header { + background-color: #1f1f1f; + border: 1px solid #333 +} + +:not(.infobox) .tabber__panel { + padding: 1em !important +} + +:not(.infobox) .tabber__panel h1, :not(.infobox) .tabber__panel h2, :not(.infobox) .tabber__panel h3 { + margin-top: 0 +} + +.diff-addedline .diffchange { + background: #0083ff +} + +.codeEditor-status { + color: #000 !important +} + +#toctogglecheckbox:not(:checked) + .toctitle { + border-bottom: 1px solid #333; + margin-bottom: 10px +} + +a.new { + color: #d33 !important +} + +.contributionscores { + width: 100% +} + +.contributionscores td { + text-align: center !important +} + +.contributionscores .header { + display: table-row +} + +.contributionscores .content { + width: auto +} + +.wikiEditor-ui-toolbar { + background-color: #1f1f1f !important +} + +.wikiEditor-ui-toolbar .label:after { + filter: invert(1) hue-rotate(180deg) brightness(1.2) +} + +.wikiEditor-ui-toolbar .tabs .tab a::before { + filter: invert(1) hue-rotate(180deg) brightness(1.2) +} + +.wikiEditor-ui .wikiEditor-ui-view { + border: 1px solid #54595d +} + +.wikiEditor-ui-toolbar { + box-shadow: 0 10px 9px 0 rgba(0, 0, 0, .1) +} + +.wikiEditor-ui-toolbar .sections .section { + border-top: none +} + +.wikiEditor-ui-toolbar .group { + border-right: none; + border-left: none +} + +.tabber__panel { + overflow: visible +} + +:not(.tabber__panel--active).tabber__panel { + display: none +} + +.tabber__section { + height: auto !important; + overflow: visible +} + +.infobox td { + font-size: 13px +} + +.minecraft-inventory td { + font-size: 15px !important +} + +.content { + padding: 0 +} + +.tabber__tab--active, .tabber__tab--active:visited { + box-shadow: inset 0 -2px 0 0 #ffc376; + border-width: 0 1px; + background-color: rgba(255, 195, 118, .1) !important; + font-weight: 700 +} + +.tabber__tab--active a:active, .tabber__tab a:visited { + color: #ffc376 !important +} + +.tabber__tab:hover { + box-shadow: inset 0 -2px 0 0 #ffc376; + color: #ffc376; + filter: brightness(1.5) +} + +.tabber__tab a:active, .tabber__tab a:visited { + color: #bdbcb9 !important +} + +.tabber__tabs { + box-shadow: none !important +} + +.tabber__tabs a:first-of-type { + border-left: none +} + +.tabber__tab { + color: #36c; + line-height: 30px; + font-weight: 400 +} + +.tabber { + margin-bottom: 5px +} + +#mw-mf-page-left ul { + list-style-type: none; + padding-left: 0 +} + +#mw-mf-page-left li { + margin-bottom: 0 +} + +#mw-mf-page-left ul li a { + color: #aaa !important +} + +#mw-mf-main-menu-button:hover + #mw-mf-page-left, #mw-mf-page-left:hover { + visibility: visible +} + +.mw-hypixel-right ul { + padding-left: 0 +} + +.mw-hypixel-right li { + margin-bottom: 0 +} + +.mw-hypixel-right a { + text-decoration: none +} + +table.mw-collapsible :first-child tr:first-child th:last-child::before { + color: #ffc376 !important +} + +.infobox.minor img, .remove-img-span img { + display: inline !important; + margin: 0 !important +} + +.infobox.minor tr:first-of-type > th { + padding: 7px; + border-bottom: 1px solid #333 !important +} + +.infobox.minor tr:nth-of-type(2) > td { + border-top: none +} + +.occupants-minor, .resources-minor { + text-align: left !important; + font-weight: 400; + padding: 5px 0 0 !important +} + +.occupants-minor:first-of-type, .resources-minor:first-of-type { + border-right: 1px solid #333 !important +} + +.occupants-minor li, .resources-minor li, .materials-minor li { + margin-bottom: 0 !important +} + +.occupants-minor ul, .resources-minor ul, .materials-minor ul { + list-style: none !important; + padding: 7px !important; + font-weight: 400 !important +} + +.color-wheel-minor { + border-radius: 50px; + border-style: solid; + border-width: 30px; + height: 0; + width: 0; + transform: rotate(45deg) +} + +.loot-drops-minor li { + list-style-type: none; + margin-bottom: 0 +} + +.gemstone-slot-minor { + text-align: center !important; + padding: 5px +} + +.upgrades-low-minor { + text-align: center !important; + font-weight: 400 !important; + border-right: 1px solid #333 !important +} + +.upgrades-right-minor { + padding: 2px !important; + padding-top: 5px !important; + text-align: center !important +} + +.upgrades-text-minor { + font-size: 15px !important; + font-weight: 700 !important +} + +.attributes-minor { + text-align: center !important; + font-weight: 400 !important; + border-right: 1px #333 solid !important +} + +.attributes-text-minor { + font-size: 13px !important; + font-weight: 700 !important +} + +.container-navbox { + max-width: 100%; + height: auto; + padding: 6px; + font-size: 15px; + background-color: #1f1f1f; + border: 1px solid #c8ccd1; + border-color: #333 !important; + border-image: url(https://wiki.hypixel.net/images/hypixel/borders/classic_border.png) 1000 1000 repeat !important; + border-image-width: 35px !important; + border-image-outset: 2px !important; + clear: both +} + +.container-navbox-header { + width: auto; + height: 35px; + padding: 10px; + border-bottom: 2px solid #333; + text-align: center; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + font-size: 18px; + vertical-align: middle +} + +.container-navbox-header p { + margin: 0 !important +} + +.container-navbox-section { + max-width: 100%; + height: auto; + border-bottom: 2px solid #333; + display: flex; + flex-direction: row; + background-color: #1f1f1f; + column-gap: 5px +} + +.container-navbox-section:last-child { + border-bottom: none +} + +.container-navbox-group-header { + width: 200px; + max-height: 100%; + padding: 1em; + display: flex; + align-items: center; + background-color: #1f1f1f; + font-weight: 700; + white-space: pre-wrap; + column-gap: 10px +} + +.container-navbox-group { + width: 100%; + padding: 15px 1em +} + +.container-navbox-group ul { + columns: 220px auto +} + +.container-navbox-group ul li { + margin-bottom: 5px +} + +.dropdown:hover .dropdown-content { + visibility: visible; + opacity: 1 +} + +blockquote { + font-family: Raleway, helvetica, serif !important +} + +.cata-image-loot-tabber * .tabber__tabs a::before { + content: ""; + width: 35px; + height: 45px; + background-position: center; + background-repeat: no-repeat; + background-size: cover +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(1)::before { + background-image: url(https://wiki.hypixel.net/images/a/a8/SkyBlock_furniture_wood_chest_plus.png) +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(2)::before { + background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_gold_chest_plus.png) +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(3)::before { + background-image: url(https://wiki.hypixel.net/images/e/e9/SkyBlock_furniture_diamond_chest_plus.png) +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(4)::before { + background-image: url(https://wiki.hypixel.net/images/8/82/SkyBlock_furniture_emerald_chest_plus.png) +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(5)::before { + background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_ender_chest_plus.png) +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(6)::before { + background-image: url(https://wiki.hypixel.net/images/b/be/SkyBlock_furniture_ender_chest_plus.png) +} + +.boss-quote-table-quote { + font-family: sans, serif; + font-size: 40px; + font-weight: 700; + color: #f55; + padding: 16px 10px; + line-height: .5 +} + +.toc > ul { + margin: 0 5em 0 32px !important +} + +.toctogglecheckbox ~ ul { + display: none +} + +.toctogglecheckbox:not(:checked) ~ ul { + display: block +} + +.dialogue-headine { + padding: .5em 0; + line-height: 1.3; + word-wrap: break-word; + word-break: break-word; + font-weight: 700 +} + +.content code { + padding: .1em .4em +} + +code { + border-image: none !important +} + +.mw-parser-output { + display: inline-block; + width: 100%; + max-width: 100% +} + +@media (min-width: 1000px) { + .header-container.header-chrome { + position: fixed; + z-index: 2; + width: 100%; + top: 0; + padding: 0 !important + } + + .header-container.header-chrome:before { + box-shadow: 0 0 20px 10px #1a1a1a + } + + #mw-mf-page-center, #mw-mf-page-center::before { + top: 100px !important + } + + .minerva-user-menu-list { + top: 60px + } +} + +@media (max-width: 1000px) { + .hypixel-site-navigation .toggle-list__toggle { + padding-left: 0 !important; + padding-right: 0 !important + } + + #hypixel-site-navigation-wrapper { + padding: 0 .75em + } +} + +@media (max-width: 720px) { + .header { + flex-wrap: wrap !important; + height: auto !important; + justify-content: space-around !important + } + + #hypixel-site-navigation-wrapper { + order: 3; + flex-wrap: wrap !important; + row-gap: 15px; + justify-content: space-around + } + + #hypixel-site-navigation-wrapper .toggle-list__list { + left: 0 !important; + width: 100% !important + } + + .branding-box { + width: 80px; + height: 40px + } + + .search-box { + width: 100% !important; + left: 0 !important + } +} + +.main-menu-mask { + display: none !important +} + +#hypixel-site-navigation-wrapper { + display: flex; + flex-wrap: nowrap +} + +.hypixel-site-navigation { + color: #fff !important; + text-shadow: 1px 1px rgba(0, 0, 0, .5) +} + +.hypixel-site-navigation a { + color: inherit !important +} + +.hypixel-site-navigation .toggle-list__toggle { + padding: .75em +} + +.hypixel-site-navigation .toggle-list__toggle:hover { + background-color: rgba(0, 0, 0, .4) +} + +.hypixel-site-navigation .toggle-list__list { + top: 100%; + min-width: 200px +} + +.hypixel-site-navigation .toggle-list__list .toggle-list-item .toggle-list-item__anchor { + min-height: 20px +} + +.toggle-list__list, .minerva-user-menu-list { + border-radius: 3px +} + +.minerva-user-navigation { + width: auto !important; + min-width: revert !important +} + +.header { + display: flex; + justify-content: space-between; + align-content: center; + align-items: center; + flex-direction: row; + flex-wrap: nowrap +} + +.hypixel-site-navigation > label::after { + content: ""; + background-image: linear-gradient(transparent, transparent), url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+ZXhwYW5kPC90aXRsZT48ZyBmaWxsPSIjYTJhOWIxIj48cGF0aCBkPSJNMTcuNSA0Ljc1bC03LjUgNy41LTcuNS03LjVMMSA2LjI1bDkgOSA5LTl6Ii8+PC9nPjwvc3ZnPg==); + display: inline-block; + vertical-align: middle; + min-width: 1em; + min-height: 1em; + padding: 0 0 0 20px; + background-repeat: no-repeat; + background-size: 1em 1em; + background-position: center +} + +#mw-mf-page-left ul li a span, .toggle-list-item__label { + color: #fff !important +} + +.mw-ui-icon-wikimedia-flag-ltr-base20:before { + background-image: url(https://wiki.hypixel.net/resources/lib/ooui/themes/wikimediaui/images/icons/flag-ltr.svg) +} + +.mw-ui-icon-wikimedia-articleRedirect-ltr-base20:before { + background-image: url(https://wiki.hypixel.net/resources/lib/ooui/themes/wikimediaui/images/icons/articleRedirect-ltr.svg) +} + +@media (max-width: 720px) { + table.infobox { + display: table !important + } + + table.wikitable { + display: block !important + } +} + +table.infobox { + display: revert !important +} + +.infobox ul { + list-style: none +} + +#userloginForm .mw-userlogin-rememberme { + display: block !important +} + +.mw-hp-tree { + color: #5f5; + margin-left: 20px +} + +.mw-hp-tree li { + margin-bottom: 0; + list-style-type: disc +} + +.mw-hp-tree li::marker { + color: #fff +} + +.mw-hp-tree ul:first-of-type { + margin-top: 6px +} + +.mw-hp-tree ul:last-of-type { + margin-bottom: 6px +} + +.mw-hp-tree-container { + margin-left: 5px +} + +.mw-hp-tree-text::after { + content: "Expand"; + color: #ba91ff; + display: inline-block +} + +.mw-hp-tree-text-down::after { + content: "Collapse"; + color: #7698ff; + display: inline-block +} + +.mw-hp-tree-anchor { + cursor: pointer; + user-select: none +} + +.mw-hp-tree-nested { + display: none +} + +.mw-hp-tree-active { + display: block +} + +.mw-display-qrcode { + border: 2px solid #fff +} + +.mw-overlays-container .search-overlay { + top: 71px +} + +.mw-overlays-container .search-overlay .search-content, .mw-overlays-container .search-overlay .results { + margin-left: 0 !important +} + +.mw-overlays-container .search-overlay .search-content { + z-index: 4; + position: relative; + border: none !important +} + +.mw-overlays-container .search-overlay .overlay-content { + padding-top: 0 !important; + z-index: 3 +} + +.mw-overlays-container .search-overlay .overlay-header { + flex-wrap: nowrap !important +} + +.mw-overlays-container .search-overlay .overlay-title { + padding-right: 15px +} + +.mw-overlays-container .search-overlay .search { + max-width: unset !important +} + +.mw-overlays-container .search-overlay .clear { + right: 5px !important +} + +.mw-overlays-container .search-overlay .results { + position: relative; + box-shadow: none !important; + background: 0 0 !important +} + +.mw-overlays-container .search-overlay .results ul > li { + color: #fff; + background: #1f1f1f; + border: 1px solid #333 !important; + border-radius: 6px; + margin: 5px 0; + box-shadow: 0 0 10px #1f1f1f !important +} + +.mw-overlays-container .search-overlay .results .list-thumb { + background-color: #212121; + border-radius: 6px +} + +.mw-overlays-container .search-overlay .results .page-summary h2, .mw-overlays-container .search-overlay .results .page-summary h3 { + color: #fff +} + +@media (min-width: 720px) { + .overlay-content { + padding-left: 236px !important + } + + .overlay-header-container { + z-index: 4 !important + } + + .search-content, .results { + width: 380px !important + } +} + +@media (max-width: 720px) { + div.overlay-header-container { + position: relative !important; + top: -71px !important + } + + .overlay-content { + padding: 0 15px + } + + .search-content, .results { + width: 100% !important + } +} + +table.sortable .headerSort { + padding-right: 21px !important; + position: relative +} + +table.sortable .headerSort:after { + background-image: inherit; + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-repeat: no-repeat; + background-position: center right; + filter: invert(100%); + pointer-events: none +} + +.warningbox > p { + color: #fff; + margin: .5em 0 +} + +.suggestions-special { + border-radius: 6px +} + +.mw-dismissable-notice { + background-color: #1f1f1f; + border-radius: 8px; + border: 1px solid #333; + border-image-width: 35px !important; + border-image-outset: 2px !important +} + +.mw-dismissable-notice { + position: fixed; + display: block; + bottom: 25px; + z-index: 6; + width: 100%; + max-width: 92% !important; + box-shadow: 0 -5px 30px 20px rgba(0, 0, 0, .3); + margin: 0 !important; + left: 50%; + transform: translateX(-50%) +} + +.mw-dismissable-notice-body { + padding: 20px; + margin: 0 !important +} + +.mw-dismissable-notice-close { + padding: 20px +} + +.banner-container { + position: relative +} + +.warningbox { + color: #fff !important +} + +#content { + position: relative; + z-index: 1; + background-color: transparent !important +} + +div#mw-mf-page-center::before { + content: ""; + position: fixed; + top: 0; + bottom: 0; + right: 0; + height: 100%; + width: 100%; + background-image: linear-gradient(#1a1a1a, transparent), url(https://wiki.hypixel.net/images/hypixel/background.png); + background-image: linear-gradient(#1a1a1a, transparent), image-set(url(https://wiki.hypixel.net/images/hypixel/background.png) 1x, url(https://wiki.hypixel.net/images/hypixel/background-large.png) 2x); + background-attachment: fixed; + background-color: #1a1a1a; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + opacity: .075; + z-index: 0; + pointer-events: none +} + +.page-Main_Page #wrapper #content { + background: 0 0 !important +} + +.last-modified-bar, .footer { + position: relative +} + +.last-modified-bar a, .last-modified-bar a:visited { + color: #fff +} + +.overlay { + z-index: 2 !important +} + +.mwe-math-element { + overflow: auto; + display: block +} + +#page-secondary-actions { + display: none +} + +.loot-drops-minor li { + margin-bottom: 0 !important +} + +.warningbox { + color: #fff +} + +.warningbox > p { + margin: .5em 0 !important; + font-size: 17px +} + +.toctitle > .mw-ui-icon-minerva-listBullet { + display: none +} + +.infobox img { + max-width: 100% !important +} + +.hp-loottable td { + border: 2px solid #1a1a1a !important +} + +.hp-loottable td:last-child { + color: #5f5 +} + +.is-affected-by-mf { + outline: dotted 3px transparent; + outline-offset: -1px; + outline-color: #5ff +} + +.is-affected-by-pl { + outline: dotted 3px transparent; + outline-offset: -1px; + outline-color: #f5f +} + +.is-affected-by-mf.is-affected-by-pl { + outline-color: #b591b7 !important +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(1)::before { + background-image: url(https://wiki.hypixel.net/images/b/b9/SkyBlock_furniture_dungeon_wood_reward_chest.png); + height: 65px +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(2)::before { + background-image: url(https://wiki.hypixel.net/images/8/85/SkyBlock_furniture_dungeon_gold_reward_chest.png); + height: 65px +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(3)::before { + background-image: url(https://wiki.hypixel.net/images/9/98/SkyBlock_furniture_dungeon_diamond_reward_chest.png); + height: 65px; + width: 40px +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(4)::before { + background-image: url(https://wiki.hypixel.net/images/e/e4/SkyBlock_furniture_dungeon_emerald_reward_chest.png); + height: 65px; + width: 40px +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(5)::before { + background-image: url(https://wiki.hypixel.net/images/4/40/SkyBlock_furniture_dungeon_obsidian_reward_chest.png); + height: 65px; + width: 50px +} + +.cata-image-loot-tabber * .tabber__tabs a:nth-child(6)::before { + background-image: url(https://wiki.hypixel.net/images/8/87/SkyBlock_furniture_dungeon_bedrock_reward_chest.png); + height: 65px; + width: 55px +} + +.diff-deletedline .diffchange { + background: #988e78 !important +} + +.hide { + display: none +} + +.page-notif-box { + border: 2px solid #333 !important; + border-left-width: 10px !important; + border-radius: 6px; + border-collapse: separate !important; + width: 75%; + background-color: #1f1f1f !important; + box-shadow: 0 0 10px #1f1f1f !important; + display: flex; + margin: auto !important; + color: #fff; + font-weight: 700; + margin-top: 25px !important; + margin-bottom: 25px !important +} + +.page-notif-box tr > td { + border: none; + padding: .25em .9em +} + +.page-notif-box img { + max-width: revert !important; + flex-shrink: 0 +} + +.page-notif-box-updating, .page-notif-box-changed { + border-color: #e7871b !important +} + +.page-notif-box-no-obtain, .page-notif-box-cannot-obtain { + border-color: #e30000 !important +} + +.page-notif-box-alpha { + border-color: #0d6f67 !important +} + +.hp-input { + height: 35px; + width: 100%; + border: none !important +} + +.dungeon-calc-container td, .loot-calc-container td { + border: 2px solid #1a1a1a +} + +.dungeon-calc-button, .loot-calc-button { + cursor: pointer; + vertical-align: bottom; + background-color: #3f7dfb !important; + transition-duration: .35s; + padding: 5px !important +} + +.dungeon-calc-button:hover, .loot-calc-button:hover { + background-color: #5e93fe !important +} + +.hp-loottable td:last-child { + color: #5f5 +} + +.dungeon-loottable td:last-child { + color: #5f5 +} + +.listspacing li { + margin-bottom: 0 !important +} + +.listspacing li:last-child { + margin-bottom: 1em !important +} + +.listdisplay li { + display: inline !important +} + +.categoryboxcontainer { + max-width: 100%; + height: 35px; + background-color: #1f1f1f; + border: 1px solid #333; + padding: 3px; + font-size: 15px; + clear: both +} + +.categoryboxcontainer li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; + line-height: 35px +} + +.categoryboxcontainer li:first-child { + padding-left: 0; + border-left: none +} + +.categoryboxcontainer li:nth-child(2) { + border-left: none +} + +.categoryboxcontainer li:empty { + display: none +} + +.tooltiptemp { + position: relative !important; + display: inline-block !important; + text-decoration: underline dotted; + cursor: help +} + +.tooltiptemp .tooltiptexttemp { + visibility: hidden; + width: 240px; + background-color: #000; + color: #fff; + text-align: center; + border: 1px #333 solid; + border-radius: 6px; + padding: 5px 0; + position: absolute; + z-index: 1; + bottom: 100% !important; + left: 50% !important; + margin-left: -120px !important; + opacity: 0; + transition: opacity 1s +} + +.tooltiptemp .tooltiptexttemp::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: #000 transparent transparent transparent +} + +.tooltiptemp:hover .tooltiptexttemp { + visibility: visible; + opacity: 1 +} + +.tooltiptemp p { + margin: 0 +} + +.raw-mctooltip { + position: relative !important; + display: inline-block !important; + font-weight: 400 +} + +.raw-mctooltip:hover .raw-mctooltiptext { + display: inline +} + +.raw-mctooltiptext { + display: none; + font-family: minecraft, helvetica, serif; + margin: 0 +} + +.content .mw-parser-output > h2 { + padding: .25em 0; + font-size: 1.8em; + margin-top: 35px +} + +.content .mw-parser-output > h2, .content .mw-parser-output > h3 { + text-transform: uppercase; + font-weight: 400 +} + +.heading-holder { + padding: 0 !important +} + +.mw-body-content blockquote { + background-color: #212121; + border-radius: 6px; + border: 1px solid #333 !important; + border-left-width: 5px !important; + display: table +} + +.tabber__tab { + font-weight: 400 !important; + column-gap: 10px +} + +.tabber__header .tabber__tab:not(.tabber__tab--active) { + color: #fff +} + +.mw-collapsible-toggle { + padding-left: 5px +} + +.tabber__header, .tabber__section, .tabber__panel { + scroll-snap-type: none !important; + overscroll-behavior: none !important; + scroll-snap-align: none !important; + overflow: hidden !important +} + +.mw-userlogin-help { + display: none +} + +@media (min-width: 720px) { + .header .branding-box { + max-height: 55px + } +} + +@font-face { + font-family: minecraft; + src: url(https://wiki.hypixel.net/fonts/minecraft.woff) format("woff") +} + +.minecraft-inventory { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + background-color: #c6c6c6; + border: 4px solid; + border-color: #fff #555 #555 #fff; + border-radius: 4px; + box-shadow: 0 0 0 1px #000; + color: #404040; + display: inline-block; + font-family: minecraft, serif; + font-size: 15px; + font-weight: 400; + padding: 2px 6px 6px; + user-select: none; + margin: 10px 0 +} + +.minecraft-inventory table { + border-collapse: separate; + margin: 0 !important +} + +.minecraft-inventory td { + background: #8b8b8b no-repeat center center/32px 32px; + border: 2px solid; + border-color: #373737 #fff #fff #373737; + box-sizing: border-box; + padding: 0; + position: relative; + width: 36px +} + +.minecraft-inventory td > .external { + background: 0 0; + padding: 0 +} + +.minecraft-inventory td > a:hover { + text-decoration: none +} + +.minecraft-inventory td:hover:after { + background: #fff; + content: ""; + float: left; + height: 100%; + left: 0; + opacity: .5; + pointer-events: none; + position: absolute; + top: 0; + width: 100% +} + +.minecraft-inventory td:hover .mctooltip { + display: block +} + +.minecraft-inventory > span { + padding: 2px +} + +.minecraft-inventory tr { + height: 36px +} + +.minecraft-inventory .enchanted::before { + content: ""; + height: 32px; + left: 0; + position: absolute; + top: 0; + width: 32px; + background-image: url(https://wiki.hypixel.net/images/minecraft/glint.webp); + mix-blend-mode: color-dodge +} + +.minecraft-inventory .enchanted::after { + content: ""; + height: 32px; + left: 0; + position: absolute; + top: 0; + width: 32px; + background-image: url(https://wiki.hypixel.net/images/minecraft/item-spritesheet_cutout.png); + background-position: inherit +} + +.minecraft-inventory .amount { + margin: 0; + position: relative; + z-index: 999 +} + +.minecraft-inventory .sbsprite { + background-repeat: no-repeat; + color: #fff; + direction: rtl; + display: block; + text-shadow: 2px 2px #3f3f3f; + background-image: url(https://wiki.hypixel.net/images/skyblock/item-spritesheet.png); + height: 22px; + line-height: 44px; + margin: 0 5px; + text-indent: -8px; + width: 22px +} + +.minecraft-inventory .mcsprite { + background-repeat: no-repeat; + color: #fff; + direction: rtl; + display: block; + text-shadow: 2px 2px #3f3f3f; + background-image: url(https://wiki.hypixel.net/images/minecraft/item-spritesheet.png); + height: 32px; + line-height: 54px; + text-indent: -2px; + width: 32px +} + +.minecraft-inventory .sbpet { + background-repeat: no-repeat; + color: #fff; + direction: rtl; + display: block; + text-shadow: 2px 2px #3f3f3f; + background-image: url(https://wiki.hypixel.net/images/skyblock/pet-spritesheet.png); + height: 22px; + line-height: 44px; + margin: 0 6px; + text-indent: -8px; + width: 20px +} + +.mctooltip { + background: rgba(16, 0, 16, .93); + border: 2px solid; + border-image: linear-gradient(to bottom, rgba(80, 0, 255, 0.31), rgba(40, 0, 127, 0.31)); + border-image-slice: 1; + border-radius: 4px; + box-shadow: 0 0 0 2px rgba(16, 0, 16, .93); + display: none; + line-height: 18px; + margin-left: 15px; + margin-top: -30px; + padding: 4px 4px 3px; + position: fixed; + text-indent: initial; + text-shadow: 2px 2px #3f3f3f; + z-index: 9999 +} + +.mctooltip > span { + direction: ltr; + display: block; + white-space: nowrap; + text-align: left +} + +.mctooltip > span:nth-child(1):not(:last-child) { + padding-bottom: 5px +} + +.mctooltip > span:nth-child(n+2) { + float: left +} + +.mctooltip > span:nth-child(n+2):not(:last-child) { + padding-right: 4px +} + +.mctooltip > span.inline { + display: inline-block !important +} + +.mctooltip .rarity-divine { + color: #5ff +} + +.mctooltip .rarity-rare { + color: #55f; + text-shadow: 2px 2px #15153f +} + +.mctooltip .rarity-epic { + color: #a0a; + text-shadow: 2px 2px #2a002a +} + +.mctooltip .rarity-supreme { + color: #a00; + text-shadow: 2px 2px #2a0000 +} + +.mctooltip .rarity-legendary { + color: #fa0; + text-shadow: 2px 2px #2a2a00 +} + +.mctooltip .rarity-uncommon { + color: #5f5; + text-shadow: 2px 2px #153f15 +} + +.mctooltip .rarity-mythic { + color: #f5f; + text-shadow: 2px 2px #3f153f +} + +.mctooltip .rarity-veryspecial { + color: #f55; + text-shadow: 2px 2px #3f1515 +} + +.mctooltip .rarity-special { + color: #f55; + text-shadow: 2px 2px #3f1515 +} + +.mctooltip .color-aqua { + text-shadow: 2px 2px #153f3f +} + +.mctooltip .color-black { + text-shadow: 2px 2px #000 +} + +.mctooltip .color-blue { + text-shadow: 2px 2px #15153f +} + +.mctooltip .color-dark_aqua { + text-shadow: 2px 2px #002a2a +} + +.mctooltip .color-dark_blue { + text-shadow: 2px 2px #00002a +} + +.mctooltip .color-dark_gray { + text-shadow: 2px 2px #151515 +} + +.mctooltip .color-dark_green { + text-shadow: 2px 2px #002a00 +} + +.mctooltip .color-dark_purple { + text-shadow: 2px 2px #2a002a +} + +.mctooltip .color-dark_red { + text-shadow: 2px 2px #2a0000 +} + +.mctooltip .color-gold { + text-shadow: 2px 2px #2a2a00 +} + +.mctooltip .color-gray { + text-shadow: 2px 2px #2a2a2a +} + +.mctooltip .color-green { + text-shadow: 2px 2px #153f15 +} + +.mctooltip .color-light_purple { + text-shadow: 2px 2px #3f153f +} + +.mctooltip .color-red { + text-shadow: 2px 2px #3f1515 +} + +.mctooltip .color-white { + text-shadow: 2px 2px #3f3f3f +} + +.mctooltip .color-yellow { + text-shadow: 2px 2px #3f3f15 +} + +.color-aqua { + color: #5ff +} + +.color-black { + color: #000 +} + +.color-blue { + color: #55f +} + +.color-dark_aqua { + color: #0aa +} + +.color-dark_blue { + color: #00a +} + +.color-dark_gray { + color: #555 +} + +.color-dark_green { + color: #0a0 +} + +.color-dark_purple { + color: #a0a +} + +.color-dark_red { + color: #a00 +} + +.color-gold { + color: #fa0 +} + +.color-gray { + color: #aaa +} + +.color-green { + color: #5f5 +} + +.color-light_purple { + color: #f5f +} + +.color-red { + color: #f55 +} + +.color-white { + color: #fff +} + +.color-yellow { + color: #ff5 +} + +.mcentity { + background-image: url(https://wiki.hypixel.net/images/minecraft/entity-spritesheet.png); + height: 16px; + width: 16px +} + +.mcblock { + background-image: url(https://wiki.hypixel.net/images/minecraft/block-spritesheet.png); + height: 16px; + width: 16px +} + +.sbspray { + background-image: url(https://wiki.hypixel.net/images/skyblock/spray-spritesheet.png); + height: 128px; + width: 128px +} + +.sbnpc { + background-image: url(https://wiki.hypixel.net/images/skyblock/npc-spritesheet.png); + height: 120px; + width: 270px +} + +.sbnpc-_56ms { + background-position: 0 0 +} + +.sbnpc-adventurer { + background-position: -120px 0 +} + +.sbnpc-agents { + background-position: -240px 0 +} + +.sbnpc-anita { + background-position: -360px 0 +} + +.sbnpc-archeologist { + background-position: -480px 0 +} + +.sbnpc-armorsmith { + background-position: -600px 0 +} + +.sbnpc-arthur { + background-position: -720px 0 +} + +.sbnpc-artist { + background-position: -840px 0 +} + +.sbnpc-artist_2 { + background-position: -960px 0 +} + +.sbnpc-auction_agent_0 { + background-position: -1080px 0 +} + +.sbnpc-auction_agent_1 { + background-position: -1200px 0 +} + +.sbnpc-auction_agent_2 { + background-position: -1320px 0 +} + +.sbnpc-auction_agent_3 { + background-position: -1440px 0 +} + +.sbnpc-auction_master { + background-position: -1560px 0 +} + +.sbnpc-baker { + background-position: -1680px 0 +} + +.sbnpc-banker { + background-position: -1800px 0 +} + +.sbnpc-bartender { + background-position: -1920px 0 +} + +.sbnpc-bazaar { + background-position: -2040px 0 +} + +.sbnpc-bazaar_assistant { + background-position: -2160px 0 +} + +.sbnpc-beekeeper { + background-position: -2280px 0 +} + +.sbnpc-bestiary { + background-position: -2400px 0 +} + +.sbnpc-beth { + background-position: -2520px 0 +} + +.sbnpc-blue_shark { + background-position: -2640px 0 +} + +.sbnpc-bodyguard_1 { + background-position: -2760px 0 +} + +.sbnpc-bodyguard_2 { + background-position: 0 -270px +} + +.sbnpc-bonzo { + background-position: -120px -270px +} + +.sbnpc-bonzo_summon_0 { + background-position: -240px -270px +} + +.sbnpc-bonzo_summon_1 { + background-position: -360px -270px +} + +.sbnpc-bonzo_summon_2 { + background-position: -480px -270px +} + +.sbnpc-bonzo_undead { + background-position: -600px -270px +} + +.sbnpc-builder { + background-position: -720px -270px +} + +.sbnpc-candidate { + background-position: -840px -270px +} + +.sbnpc-cannibal_undead { + background-position: -960px -270px +} + +.sbnpc-carpenter { + background-position: -1080px -270px +} + +.sbnpc-catacombs_blacksmith { + background-position: -1200px -270px +} + +.sbnpc-century_simon { + background-position: -1320px -270px +} + +.sbnpc-charlie { + background-position: -1440px -270px +} + +.sbnpc-clerk_election { + background-position: -1560px -270px +} + +.sbnpc-community_shop { + background-position: -1680px -270px +} + +.sbnpc-crypt_dreadlord { + background-position: -1800px -270px +} + +.sbnpc-crypt_souleater { + background-position: -1920px -270px +} + +.sbnpc-crystal_sentry { + background-position: -2040px -270px +} + +.sbnpc-dante_grey { + background-position: -2160px -270px +} + +.sbnpc-dante_statue { + background-position: -2280px -270px +} + +.sbnpc-default_lost_adventurer { + background-position: -2400px -270px +} + +.sbnpc-derp_candidate { + background-position: -2520px -270px +} + +.sbnpc-diamond_guy { + background-position: -2640px -270px +} + +.sbnpc-dictator { + background-position: -2760px -270px +} + +.sbnpc-dirt_guy { + background-position: 0 -540px +} + +.sbnpc-donpireso { + background-position: -120px -540px +} + +.sbnpc-duncan { + background-position: -240px -540px +} + +.sbnpc-dungeons_candidate { + background-position: -360px -540px +} + +.sbnpc-dungeons_hub_selector { + background-position: -480px -540px +} + +.sbnpc-dusk { + background-position: -600px -540px +} + +.sbnpc-dwarf_banker { + background-position: -720px -540px +} + +.sbnpc-dwarf_citizen_female_5 { + background-position: -840px -540px +} + +.sbnpc-dwarf_citizen_female_6 { + background-position: -960px -540px +} + +.sbnpc-dwarf_citizen_female_7 { + background-position: -1080px -540px +} + +.sbnpc-dwarf_citizen_male_1 { + background-position: -1200px -540px +} + +.sbnpc-dwarf_citizen_male_2 { + background-position: -1320px -540px +} + +.sbnpc-dwarf_citizen_male_3 { + background-position: -1440px -540px +} + +.sbnpc-dwarf_citizen_male_4 { + background-position: -1560px -540px +} + +.sbnpc-dwarf_council_female_5 { + background-position: -1680px -540px +} + +.sbnpc-dwarf_council_female_6 { + background-position: -1800px -540px +} + +.sbnpc-dwarf_council_female_7 { + background-position: -1920px -540px +} + +.sbnpc-dwarf_council_female_8 { + background-position: -2040px -540px +} + +.sbnpc-dwarf_council_male_1 { + background-position: -2160px -540px +} + +.sbnpc-dwarf_council_male_2 { + background-position: -2280px -540px +} + +.sbnpc-dwarf_council_male_3 { + background-position: -2400px -540px +} + +.sbnpc-dwarf_council_male_4 { + background-position: -2520px -540px +} + +.sbnpc-dwarf_militia_1 { + background-position: -2640px -540px +} + +.sbnpc-dwarf_militia_2 { + background-position: -2760px -540px +} + +.sbnpc-dwarf_militia_3 { + background-position: 0 -810px +} + +.sbnpc-dwarf_militia_4 { + background-position: -120px -810px +} + +.sbnpc-dwarf_militia_5 { + background-position: -240px -810px +} + +.sbnpc-dwarf_militia_6 { + background-position: -360px -810px +} + +.sbnpc-dwarf_royalguard_female_5 { + background-position: -480px -810px +} + +.sbnpc-dwarf_royalguard_female_6 { + background-position: -600px -810px +} + +.sbnpc-dwarf_royalguard_female_7 { + background-position: -720px -810px +} + +.sbnpc-dwarf_royalguard_female_8 { + background-position: -840px -810px +} + +.sbnpc-dwarf_royalguard_male_1 { + background-position: -960px -810px +} + +.sbnpc-dwarf_royalguard_male_2 { + background-position: -1080px -810px +} + +.sbnpc-dwarf_royalguard_male_3 { + background-position: -1200px -810px +} + +.sbnpc-dwarf_royalguard_male_4 { + background-position: -1320px -810px +} + +.sbnpc-economist_candidate { + background-position: -1440px -810px +} + +.sbnpc-elle { + background-position: -1560px -810px +} + +.sbnpc-emissary_female_1 { + background-position: -1680px -810px +} + +.sbnpc-emissary_female_2 { + background-position: -1800px -810px +} + +.sbnpc-emissary_female_3 { + background-position: -1920px -810px +} + +.sbnpc-emissary_male_1 { + background-position: -2040px -810px +} + +.sbnpc-emissary_male_2 { + background-position: -2160px -810px +} + +.sbnpc-emissary_male_3 { + background-position: -2280px -810px +} + +.sbnpc-end_dealer { + background-position: -2400px -810px +} + +.sbnpc-enderman_liquid_hot_magma { + background-position: -2520px -810px +} + +.sbnpc-enraged_revenant_horror { + background-position: -2640px -810px +} + +.sbnpc-entity_liquid_hot_magma { + background-position: -2760px -810px +} + +.sbnpc-event_master { + background-position: 0 -1080px +} + +.sbnpc-events_candidate { + background-position: -120px -1080px +} + +.sbnpc-fairy { + background-position: -240px -1080px +} + +.sbnpc-farm_merchant { + background-position: -360px -1080px +} + +.sbnpc-farmer { + background-position: -480px -1080px +} + +.sbnpc-farmer_jon { + background-position: -600px -1080px +} + +.sbnpc-fire_guy { + background-position: -720px -1080px +} + +.sbnpc-fish_merchant { + background-position: -840px -1080px +} + +.sbnpc-fisherman { + background-position: -960px -1080px +} + +.sbnpc-fishing_candidate { + background-position: -1080px -1080px +} + +.sbnpc-flamer_undead { + background-position: -1200px -1080px +} + +.sbnpc-forger { + background-position: -1320px -1080px +} + +.sbnpc-frank_undead { + background-position: -1440px -1080px +} + +.sbnpc-friendly_hiker { + background-position: -1560px -1080px +} + +.sbnpc-frost_undead { + background-position: -1680px -1080px +} + +.sbnpc-frosty { + background-position: -1800px -1080px +} + +.sbnpc-frozen_lost_adventurer { + background-position: -1920px -1080px +} + +.sbnpc-furry_e_boy { + background-position: -2040px -1080px +} + +.sbnpc-gatekeeper { + background-position: -2160px -1080px +} + +.sbnpc-giant_undead { + background-position: -2280px -1080px +} + +.sbnpc-goblin { + background-position: -2400px -1080px +} + +.sbnpc-goblin_armor_1 { + background-position: -2520px -1080px +} + +.sbnpc-goblin_armor_2 { + background-position: -2640px -1080px +} + +.sbnpc-goblin_armor_3 { + background-position: -2760px -1080px +} + +.sbnpc-goblin_armor_4 { + background-position: 0 -1350px +} + +.sbnpc-goblin_king_1 { + background-position: -120px -1350px +} + +.sbnpc-goblin_murderlover { + background-position: -240px -1350px +} + +.sbnpc-goblin_naked_1 { + background-position: -360px -1350px +} + +.sbnpc-goblin_naked_2 { + background-position: -480px -1350px +} + +.sbnpc-goblin_naked_3 { + background-position: -600px -1350px +} + +.sbnpc-goblin_naked_4 { + background-position: -720px -1350px +} + +.sbnpc-goblin_naked_5 { + background-position: -840px -1350px +} + +.sbnpc-gold_forger { + background-position: -960px -1350px +} + +.sbnpc-goon { + background-position: -1080px -1350px +} + +.sbnpc-grandma_wolf { + background-position: -1200px -1350px +} + +.sbnpc-great_white_shark { + background-position: -1320px -1350px +} + +.sbnpc-guber { + background-position: -1440px -1350px +} + +.sbnpc-guildford { + background-position: -1560px -1350px +} + +.sbnpc-gulliver { + background-position: -1680px -1350px +} + +.sbnpc-gustave { + background-position: -1800px -1350px +} + +.sbnpc-haymitch { + background-position: -1920px -1350px +} + +.sbnpc-hephaestus { + background-position: -2040px -1350px +} + +.sbnpc-holy_lost_adventurer { + background-position: -2160px -1350px +} + +.sbnpc-hub_selector { + background-position: -2280px -1350px +} + +.sbnpc-hungry_hiker { + background-position: -2400px -1350px +} + +.sbnpc-hunter_ava { + background-position: -2520px -1350px +} + +.sbnpc-ice_fisherman { + background-position: -2640px -1350px +} + +.sbnpc-iron_forger { + background-position: -2760px -1350px +} + +.sbnpc-jacob { + background-position: 0 -1620px +} + +.sbnpc-jake { + background-position: -120px -1620px +} + +.sbnpc-juliette { + background-position: -240px -1620px +} + +.sbnpc-kessie { + background-position: -360px -1620px +} + +.sbnpc-king_midas { + background-position: -480px -1620px +} + +.sbnpc-lapis_miner { + background-position: -600px -1620px +} + +.sbnpc-lazy_miner { + background-position: -720px -1620px +} + +.sbnpc-leech_undead { + background-position: -840px -1620px +} + +.sbnpc-lift_operator { + background-position: -960px -1620px +} + +.sbnpc-liquid_hot_magma { + background-position: -1080px -1620px +} + +.sbnpc-livid { + background-position: -1200px -1620px +} + +.sbnpc-livid_undead { + background-position: -1320px -1620px +} + +.sbnpc-lonely_philosopher { + background-position: -1440px -1620px +} + +.sbnpc-lumber_merchant { + background-position: -1560px -1620px +} + +.sbnpc-lumberjack { + background-position: -1680px -1620px +} + +.sbnpc-mason { + background-position: -1800px -1620px +} + +.sbnpc-master_tactician { + background-position: -1920px -1620px +} + +.sbnpc-mayhem_main { + background-position: -2040px -1620px +} + +.sbnpc-mayor { + background-position: -2160px -1620px +} + +.sbnpc-melancholic_viking { + background-position: -2280px -1620px +} + +.sbnpc-melody { + background-position: -2400px -1620px +} + +.sbnpc-mine_merchant { + background-position: -2520px -1620px +} + +.sbnpc-mining_candidate { + background-position: -2640px -1620px +} + +.sbnpc-minos_champion { + background-position: -2760px -1620px +} + +.sbnpc-minos_inquisitor { + background-position: 0 -1890px +} + +.sbnpc-minotaur { + background-position: -120px -1890px +} + +.sbnpc-mort { + background-position: -240px -1890px +} + +.sbnpc-mr_dead_undead { + background-position: -360px -1890px +} + +.sbnpc-mute_undead { + background-position: -480px -1890px +} + +.sbnpc-nitroholic { + background-position: -600px -1890px +} + +.sbnpc-nurse_shark { + background-position: -720px -1890px +} + +.sbnpc-old_man_garry { + background-position: -840px -1890px +} + +.sbnpc-ooze_undead { + background-position: -960px -1890px +} + +.sbnpc-ophelia { + background-position: -1080px -1890px +} + +.sbnpc-oringo { + background-position: -1200px -1890px +} + +.sbnpc-parasite_undead { + background-position: -1320px -1890px +} + +.sbnpc-pat { + background-position: -1440px -1890px +} + +.sbnpc-personal_bank_upgrader { + background-position: -1560px -1890px +} + +.sbnpc-pet_collector { + background-position: -1680px -1890px +} + +.sbnpc-pet_sitter { + background-position: -1800px -1890px +} + +.sbnpc-pets_candidate { + background-position: -1920px -1890px +} + +.sbnpc-placeholder_candidate { + background-position: -2040px -1890px +} + +.sbnpc-player_jerry { + background-position: -2160px -1890px +} + +.sbnpc-potato_king { + background-position: -2280px -1890px +} + +.sbnpc-professor { + background-position: -2400px -1890px +} + +.sbnpc-psycho_undead { + background-position: -2520px -1890px +} + +.sbnpc-putrid_undead { + background-position: -2640px -1890px +} + +.sbnpc-puzzler { + background-position: -2760px -1890px +} + +.sbnpc-rainmaker { + background-position: 0 -2160px +} + +.sbnpc-reaper_undead { + background-position: -120px -2160px +} + +.sbnpc-redstone_engineer { + background-position: -240px -2160px +} + +.sbnpc-refraction { + background-position: -360px -2160px +} + +.sbnpc-relenter { + background-position: -480px -2160px +} + +.sbnpc-revenant_horror { + background-position: -600px -2160px +} + +.sbnpc-revoker_undead { + background-position: -720px -2160px +} + +.sbnpc-rick { + background-position: -840px -2160px +} + +.sbnpc-romero_final { + background-position: -960px -2160px +} + +.sbnpc-romero_normal { + background-position: -1080px -2160px +} + +.sbnpc-sadan { + background-position: -1200px -2160px +} + +.sbnpc-salesman_christmas { + background-position: -1320px -2160px +} + +.sbnpc-salesman_easter { + background-position: -1440px -2160px +} + +.sbnpc-salesman_generic { + background-position: -1560px -2160px +} + +.sbnpc-salesman_halloween { + background-position: -1680px -2160px +} + +.sbnpc-salesman_summer { + background-position: -1800px -2160px +} + +.sbnpc-scarf_archer { + background-position: -1920px -2160px +} + +.sbnpc-scarf_mage { + background-position: -2040px -2160px +} + +.sbnpc-scarf_priest { + background-position: -2160px -2160px +} + +.sbnpc-scarf_undead { + background-position: -2280px -2160px +} + +.sbnpc-scarf_warrior { + background-position: -2400px -2160px +} + +.sbnpc-scoop { + background-position: -2520px -2160px +} + +.sbnpc-scorpius { + background-position: -2640px -2160px +} + +.sbnpc-shadow_assassin { + background-position: -2760px -2160px +} + +.sbnpc-shady_bartender { + background-position: 0 -2430px +} + +.sbnpc-shady_cousin { + background-position: -120px -2430px +} + +.sbnpc-shaggy { + background-position: -240px -2430px +} + +.sbnpc-shepherd { + background-position: -360px -2430px +} + +.sbnpc-simon_hat { + background-position: -480px -2430px +} + +.sbnpc-sirius { + background-position: -600px -2430px +} + +.sbnpc-skeletor_prime { + background-position: -720px -2430px +} + +.sbnpc-skull_undead { + background-position: -840px -2430px +} + +.sbnpc-slayer { + background-position: -960px -2430px +} + +.sbnpc-slayer_candidate { + background-position: -1080px -2430px +} + +.sbnpc-snowmaker { + background-position: -1200px -2430px +} + +.sbnpc-spirit_bear { + background-position: -1320px -2430px +} + +.sbnpc-spooky { + background-position: -1440px -2430px +} + +.sbnpc-st_jerry { + background-position: -1560px -2430px +} + +.sbnpc-sylent { + background-position: -1680px -2430px +} + +.sbnpc-tailor_assistant { + background-position: -1800px -2430px +} + +.sbnpc-tailor_owner { + background-position: -1920px -2430px +} + +.sbnpc-tammy { + background-position: -2040px -2430px +} + +.sbnpc-tear_undead { + background-position: -2160px -2430px +} + +.sbnpc-technoblade { + background-position: -2280px -2430px +} + +.sbnpc-terracotta { + background-position: -2400px -2430px +} + +.sbnpc-terry { + background-position: -2520px -2430px +} + +.sbnpc-thirty_virus { + background-position: -2640px -2430px +} + +.sbnpc-tiger_shark { + background-position: -2760px -2430px +} + +.sbnpc-timedeo { + background-position: -2880px 0 +} + +.sbnpc-tomioka { + background-position: -2880px -270px +} + +.sbnpc-tony { + background-position: -2880px -540px +} + +.sbnpc-treasure_horder { + background-position: -2880px -810px +} + +.sbnpc-treasure_hunter { + background-position: -2880px -1080px +} + +.sbnpc-trevor { + background-position: -2880px -1350px +} + +.sbnpc-trinity { + background-position: -2880px -1620px +} + +.sbnpc-unstable_lost_adventurer { + background-position: -2880px -1890px +} + +.sbnpc-vader_undead { + background-position: -2880px -2160px +} + +.sbnpc-vinny { + background-position: -2880px -2430px +} + +.sbnpc-walker_undead { + background-position: 0 -2700px +} + +.sbnpc-walter { + background-position: -120px -2700px +} + +.sbnpc-weaponsmith { + background-position: -240px -2700px +} + +.sbnpc-weirdo_0 { + background-position: -360px -2700px +} + +.sbnpc-weirdo_1 { + background-position: -480px -2700px +} + +.sbnpc-weirdo_2 { + background-position: -600px -2700px +} + +.sbnpc-winona { + background-position: -720px -2700px +} + +.sbnpc-winter_banker { + background-position: -840px -2700px +} + +.sbnpc-wizard { + background-position: -960px -2700px +} + +.sbnpc-wizard_candidate { + background-position: -1080px -2700px +} + +.sbnpc-wizard_quest { + background-position: -1200px -2700px +} + +.sbnpc-wolf_shaman { + background-position: -1320px -2700px +} + +.sbnpc-wool_weaver { + background-position: -1440px -2700px +} + +.sbnpc-young_lost_adventurer { + background-position: -1560px -2700px +} + +.sbnpc-zog { + background-position: -1680px -2700px +} + +.sbnpc-zombie_commander { + background-position: -1800px -2700px +} + +.sbsprite-cobblestone_generator_10 { + background-position: 0 0 +} + +.sbsprite-cobblestone_generator_11 { + background-position: -22px 0 +} + +.sbsprite-danger_3_portal { + background-position: -44px 0 +} + +.sbsprite-resource_regenerator_crystal { + background-position: -66px 0 +} + +.sbsprite-sugar_cane_generator_12 { + background-position: -88px 0 +} + +.sbsprite-cobblestone_generator_12 { + background-position: -110px 0 +} + +.sbsprite-sugar_cane_generator_11 { + background-position: -132px 0 +} + +.sbsprite-sugar_cane_generator_10 { + background-position: -154px 0 +} + +.sbsprite-small_shelves { + background-position: -176px 0 +} + +.sbsprite-bingo_talisman { + background-position: -198px 0 +} + +.sbsprite-red_scarf { + background-position: -220px 0 +} + +.sbsprite-wither_helmet { + background-position: -242px 0 +} + +.sbsprite-glowstone_generator_11 { + background-position: -264px 0 +} + +.sbsprite-glowstone_generator_10 { + background-position: -286px 0 +} + +.sbsprite-fast_travel_crypt { + background-position: -308px 0 +} + +.sbsprite-present_personality { + background-position: -330px 0 +} + +.sbsprite-extra_large_gemstone_sack { + background-position: -352px 0 +} + +.sbsprite-gold_bonzo_head { + background-position: -374px 0 +} + +.sbsprite-shadow_assassin_mauve { + background-position: -396px 0 +} + +.sbsprite-ender_artifact { + background-position: -418px 0 +} + +.sbsprite-sheep_generator_1 { + background-position: -440px 0 +} + +.sbsprite-beach_chair_plus { + background-position: -462px 0 +} + +.sbsprite-sheep_generator_2 { + background-position: -484px 0 +} + +.sbsprite-sheep_generator_3 { + background-position: -506px 0 +} + +.sbsprite-sheep_generator_4 { + background-position: -528px 0 +} + +.sbsprite-sheep_generator_5 { + background-position: -550px 0 +} + +.sbsprite-sheep_generator_6 { + background-position: -572px 0 +} + +.sbsprite-frozen_spider { + background-position: -594px 0 +} + +.sbsprite-sheep_generator_7 { + background-position: -616px 0 +} + +.sbsprite-sheep_generator_8 { + background-position: -638px 0 +} + +.sbsprite-sheep_generator_9 { + background-position: -660px 0 +} + +.sbsprite-nether_wart_island_crystal { + background-position: -682px 0 +} + +.sbsprite-medium_fishing_sack { + background-position: -704px 0 +} + +.sbsprite-gold_generator_9 { + background-position: -726px 0 +} + +.sbsprite-gold_generator_7 { + background-position: -748px 0 +} + +.sbsprite-gold_generator_8 { + background-position: -770px 0 +} + +.sbsprite-gold_generator_5 { + background-position: -792px 0 +} + +.sbsprite-penguin_10 { + background-position: -814px 0 +} + +.sbsprite-diver_helmet { + background-position: -836px 0 +} + +.sbsprite-gold_generator_6 { + background-position: -858px 0 +} + +.sbsprite-penguin_11 { + background-position: -880px 0 +} + +.sbsprite-gold_generator_3 { + background-position: -902px 0 +} + +.sbsprite-gold_generator_4 { + background-position: -924px 0 +} + +.sbsprite-pet_skin_sheep_purple { + background-position: -946px 0 +} + +.sbsprite-gold_generator_1 { + background-position: -968px 0 +} + +.sbsprite-gold_generator_2 { + background-position: -990px 0 +} + +.sbsprite-jar_of_pickles { + background-position: -1012px 0 +} + +.sbsprite-griffin_upgrade_stone_legendary { + background-position: -1034px 0 +} + +.sbsprite-pet_skin_sheep_orange { + background-position: 0 -22px +} + +.sbsprite-talisman { + background-position: -22px -22px +} + +.sbsprite-jungle_generator_7 { + background-position: -44px -22px +} + +.sbsprite-jungle_generator_6 { + background-position: -66px -22px +} + +.sbsprite-tutti_frutti_poison { + background-position: -88px -22px +} + +.sbsprite-fishing_generator_11 { + background-position: -110px -22px +} + +.sbsprite-jungle_generator_9 { + background-position: -132px -22px +} + +.sbsprite-fishing_generator_10 { + background-position: -154px -22px +} + +.sbsprite-jungle_generator_8 { + background-position: -176px -22px +} + +.sbsprite-jungle_generator_3 { + background-position: -198px -22px +} + +.sbsprite-witch_mask { + background-position: -220px -22px +} + +.sbsprite-yellow { + background-position: -242px -22px +} + +.sbsprite-jungle_generator_2 { + background-position: -264px -22px +} + +.sbsprite-jungle_generator_5 { + background-position: -286px -22px +} + +.sbsprite-jungle_generator_4 { + background-position: -308px -22px +} + +.sbsprite-bat_person_artifact { + background-position: -330px -22px +} + +.sbsprite-cocoa_generator_11 { + background-position: -352px -22px +} + +.sbsprite-cocoa_generator_12 { + background-position: -374px -22px +} + +.sbsprite-jungle_generator_1 { + background-position: -396px -22px +} + +.sbsprite-cocoa_generator_10 { + background-position: -418px -22px +} + +.sbsprite-beheaded_horror { + background-position: -440px -22px +} + +.sbsprite-clay_generator_6 { + background-position: -462px -22px +} + +.sbsprite-clay_generator_7 { + background-position: -484px -22px +} + +.sbsprite-clay_generator_8 { + background-position: -506px -22px +} + +.sbsprite-clay_generator_9 { + background-position: -528px -22px +} + +.sbsprite-clay_generator_2 { + background-position: -550px -22px +} + +.sbsprite-clay_generator_3 { + background-position: -572px -22px +} + +.sbsprite-clay_generator_4 { + background-position: -594px -22px +} + +.sbsprite-clay_generator_5 { + background-position: -616px -22px +} + +.sbsprite-gold_livid_head { + background-position: -638px -22px +} + +.sbsprite-clay_generator_1 { + background-position: -660px -22px +} + +.sbsprite-medium_slayer_sack { + background-position: -682px -22px +} + +.sbsprite-pet_skin_wither { + background-position: -704px -22px +} + +.sbsprite-pink_frosted_donut_3 { + background-position: -726px -22px +} + +.sbsprite-pink_frosted_donut_2 { + background-position: -748px -22px +} + +.sbsprite-pink_frosted_donut_5 { + background-position: -770px -22px +} + +.sbsprite-garland { + background-position: -792px -22px +} + +.sbsprite-pink_frosted_donut_4 { + background-position: -814px -22px +} + +.sbsprite-pink_frosted_donut_7 { + background-position: -836px -22px +} + +.sbsprite-pink_frosted_donut_6 { + background-position: -858px -22px +} + +.sbsprite-pink_frosted_donut_9 { + background-position: -880px -22px +} + +.sbsprite-pink_frosted_donut_8 { + background-position: -902px -22px +} + +.sbsprite-rune_jerry { + background-position: -924px -22px +} + +.sbsprite-feather_ring { + background-position: -946px -22px +} + +.sbsprite-perfect_forge { + background-position: -968px -22px +} + +.sbsprite-bingo_relic { + background-position: -990px -22px +} + +.sbsprite-revenant_catalyst { + background-position: -1012px -22px +} + +.sbsprite-sun_2 { + background-position: -1034px -22px +} + +.sbsprite-sun_1 { + background-position: 0 -44px +} + +.sbsprite-pet_skin_tiger_twilight { + background-position: -22px -44px +} + +.sbsprite-blessing_of_life { + background-position: -44px -44px +} + +.sbsprite-plasma { + background-position: -66px -44px +} + +.sbsprite-carrot_patch { + background-position: -88px -44px +} + +.sbsprite-pink_frosted_donut_1 { + background-position: -110px -44px +} + +.sbsprite-bestiary_the_park { + background-position: -132px -44px +} + +.sbsprite-end_stone_10 { + background-position: -154px -44px +} + +.sbsprite-end_stone_11 { + background-position: -176px -44px +} + +.sbsprite-griffin_upgrade_stone_epic { + background-position: -198px -44px +} + +.sbsprite-iron_generator_10 { + background-position: -220px -44px +} + +.sbsprite-pet_skin_rock_embarrassed { + background-position: -242px -44px +} + +.sbsprite-fast_travel_barn { + background-position: -264px -44px +} + +.sbsprite-iron_generator_11 { + background-position: -286px -44px +} + +.sbsprite-iron_generator_12 { + background-position: -308px -44px +} + +.sbsprite-large_runes_sack { + background-position: -330px -44px +} + +.sbsprite-rune_redstone { + background-position: -352px -44px +} + +.sbsprite-horseman_candle { + background-position: -374px -44px +} + +.sbsprite-tepid_green_tea { + background-position: -396px -44px +} + +.sbsprite-large_agronomy_sack { + background-position: -418px -44px +} + +.sbsprite-wise_shimmer { + background-position: -440px -44px +} + +.sbsprite-maxor_the_fish { + background-position: -462px -44px +} + +.sbsprite-revenant_generator_4 { + background-position: -484px -44px +} + +.sbsprite-revenant_generator_5 { + background-position: -506px -44px +} + +.sbsprite-revenant_generator_6 { + background-position: -528px -44px +} + +.sbsprite-revenant_generator_7 { + background-position: -550px -44px +} + +.sbsprite-revenant_generator_1 { + background-position: -572px -44px +} + +.sbsprite-revenant_generator_2 { + background-position: -594px -44px +} + +.sbsprite-epoch_cake_orange { + background-position: -616px -44px +} + +.sbsprite-revenant_generator_3 { + background-position: -638px -44px +} + +.sbsprite-large_gemstone_sack { + background-position: -660px -44px +} + +.sbsprite-mender_crown { + background-position: -682px -44px +} + +.sbsprite-mummy_10 { + background-position: -704px -44px +} + +.sbsprite-revenant_generator_8 { + background-position: -726px -44px +} + +.sbsprite-revenant_generator_9 { + background-position: -748px -44px +} + +.sbsprite-mummy_11 { + background-position: -770px -44px +} + +.sbsprite-hard_stone_generator_9 { + background-position: -792px -44px +} + +.sbsprite-hard_stone_generator_8 { + background-position: -814px -44px +} + +.sbsprite-hard_stone_generator_7 { + background-position: -836px -44px +} + +.sbsprite-hard_stone_generator_6 { + background-position: -858px -44px +} + +.sbsprite-hard_stone_generator_5 { + background-position: -880px -44px +} + +.sbsprite-hard_stone_generator_4 { + background-position: -902px -44px +} + +.sbsprite-medium_talisman_bag { + background-position: -924px -44px +} + +.sbsprite-hard_stone_generator_3 { + background-position: -946px -44px +} + +.sbsprite-black_small_backpack { + background-position: -968px -44px +} + +.sbsprite-hard_stone_generator_2 { + background-position: -990px -44px +} + +.sbsprite-harp { + background-position: -1012px -44px +} + +.sbsprite-hard_stone_generator_1 { + background-position: -1034px -44px +} + +.sbsprite-pet_skin_sheep_green { + background-position: 0 -66px +} + +.sbsprite-magma_cube_generator_10 { + background-position: -22px -66px +} + +.sbsprite-fishing_crystal { + background-position: -44px -66px +} + +.sbsprite-magma_cube_generator_11 { + background-position: -66px -66px +} + +.sbsprite-rough_amber_gem { + background-position: -88px -66px +} + +.sbsprite-oak_generator_5 { + background-position: -110px -66px +} + +.sbsprite-oak_generator_4 { + background-position: -132px -66px +} + +.sbsprite-oak_generator_3 { + background-position: -154px -66px +} + +.sbsprite-oak_generator_2 { + background-position: -176px -66px +} + +.sbsprite-red_claw_ring { + background-position: -198px -66px +} + +.sbsprite-oak_generator_9 { + background-position: -220px -66px +} + +.sbsprite-oak_generator_8 { + background-position: -242px -66px +} + +.sbsprite-purple_small_backpack { + background-position: -264px -66px +} + +.sbsprite-oak_generator_7 { + background-position: -286px -66px +} + +.sbsprite-oak_generator_6 { + background-position: -308px -66px +} + +.sbsprite-picnic_set { + background-position: -330px -66px +} + +.sbsprite-oak_generator_1 { + background-position: -352px -66px +} + +.sbsprite-pet_skin_sheep_neon_red { + background-position: -374px -66px +} + +.sbsprite-hot_stuff { + background-position: -396px -66px +} + +.sbsprite-skeleton_generator_11 { + background-position: -418px -66px +} + +.sbsprite-skeleton_generator_10 { + background-position: -440px -66px +} + +.sbsprite-mayor_jerry { + background-position: -462px -66px +} + +.sbsprite-generals_armor_of_the_resistance_helmet { + background-position: -484px -66px +} + +.sbsprite-recall_potion { + background-position: -506px -66px +} + +.sbsprite-portable_builder { + background-position: -528px -66px +} + +.sbsprite-rune_ice { + background-position: -550px -66px +} + +.sbsprite-zombie_brain_mixin { + background-position: -572px -66px +} + +.sbsprite-pet_skin_rabbit_aquamarine { + background-position: -594px -66px +} + +.sbsprite-rune_music { + background-position: -616px -66px +} + +.sbsprite-magnetic_talisman { + background-position: -638px -66px +} + +.sbsprite-light_grey_jumbo_backpack { + background-position: -660px -66px +} + +.sbsprite-onyx { + background-position: -682px -66px +} + +.sbsprite-rune_fire { + background-position: -704px -66px +} + +.sbsprite-pet_skin_sheep_black { + background-position: -726px -66px +} + +.sbsprite-ice_fireplace { + background-position: -748px -66px +} + +.sbsprite-sun_personality { + background-position: -770px -66px +} + +.sbsprite-pet { + background-position: -792px -66px +} + +.sbsprite-melon_2 { + background-position: -814px -66px +} + +.sbsprite-melon_3 { + background-position: -836px -66px +} + +.sbsprite-epoch_cake_purple { + background-position: -858px -66px +} + +.sbsprite-melon_1 { + background-position: -880px -66px +} + +.sbsprite-krampus_helmet { + background-position: -902px -66px +} + +.sbsprite-coffee_table { + background-position: -924px -66px +} + +.sbsprite-necromancer_lord_helmet { + background-position: -946px -66px +} + +.sbsprite-melon_8 { + background-position: -968px -66px +} + +.sbsprite-blue_ice_hunk { + background-position: -990px -66px +} + +.sbsprite-divan_helmet { + background-position: -1012px -66px +} + +.sbsprite-melon_9 { + background-position: -1034px -66px +} + +.sbsprite-melon_6 { + background-position: 0 -88px +} + +.sbsprite-melon_7 { + background-position: -22px -88px +} + +.sbsprite-melon_4 { + background-position: -44px -88px +} + +.sbsprite-melon_5 { + background-position: -66px -88px +} + +.sbsprite-blue_candy { + background-position: -88px -88px +} + +.sbsprite-squid_hat { + background-position: -110px -88px +} + +.sbsprite-dungeon_green_support_orb { + background-position: -132px -88px +} + +.sbsprite-coin_diamond_3 { + background-position: -154px -88px +} + +.sbsprite-pink { + background-position: -176px -88px +} + +.sbsprite-coin_diamond_2 { + background-position: -198px -88px +} + +.sbsprite-repelling_candle { + background-position: -220px -88px +} + +.sbsprite-enderman_generator_11 { + background-position: -242px -88px +} + +.sbsprite-power_artifact { + background-position: -264px -88px +} + +.sbsprite-enderman_generator_10 { + background-position: -286px -88px +} + +.sbsprite-amethyst_crystal { + background-position: -308px -88px +} + +.sbsprite-crimson_essence { + background-position: -330px -88px +} + +.sbsprite-blue_small_backpack { + background-position: -352px -88px +} + +.sbsprite-grey_jumbo_backpack { + background-position: -374px -88px +} + +.sbsprite-wither_essence { + background-position: -396px -88px +} + +.sbsprite-brown_jumbo_backpack { + background-position: -418px -88px +} + +.sbsprite-archer_dungeon_ability_1 { + background-position: -440px -88px +} + +.sbsprite-crochet_tiger_plushie { + background-position: -462px -88px +} + +.sbsprite-final_destination_helmet { + background-position: -484px -88px +} + +.sbsprite-luxurious_spool { + background-position: -506px -88px +} + +.sbsprite-auto_recombobulator { + background-position: -528px -88px +} + +.sbsprite-killer_11 { + background-position: -550px -88px +} + +.sbsprite-spooky_bait { + background-position: -572px -88px +} + +.sbsprite-killer_10 { + background-position: -594px -88px +} + +.sbsprite-fast_travel_howl { + background-position: -616px -88px +} + +.sbsprite-etherwarp_conduit { + background-position: -638px -88px +} + +.sbsprite-forest_island_crystal { + background-position: -660px -88px +} + +.sbsprite-spirit_mask { + background-position: -682px -88px +} + +.sbsprite-sacks { + background-position: -704px -88px +} + +.sbsprite-obsidian_generator_10 { + background-position: -726px -88px +} + +.sbsprite-chicken_generator_10 { + background-position: -748px -88px +} + +.sbsprite-chicken_generator_12 { + background-position: -770px -88px +} + +.sbsprite-wood_singularity { + background-position: -792px -88px +} + +.sbsprite-chicken_generator_11 { + background-position: -814px -88px +} + +.sbsprite-sun_6 { + background-position: -836px -88px +} + +.sbsprite-builder_melon { + background-position: -858px -88px +} + +.sbsprite-santa_1 { + background-position: -880px -88px +} + +.sbsprite-sun_5 { + background-position: -902px -88px +} + +.sbsprite-dirt_bottle { + background-position: -924px -88px +} + +.sbsprite-sun_4 { + background-position: -946px -88px +} + +.sbsprite-handy_blood_chalice { + background-position: -968px -88px +} + +.sbsprite-sun_3 { + background-position: -990px -88px +} + +.sbsprite-sun_9 { + background-position: -1012px -88px +} + +.sbsprite-superior_fragment { + background-position: -1034px -88px +} + +.sbsprite-sun_8 { + background-position: 0 -110px +} + +.sbsprite-sun_7 { + background-position: -22px -110px +} + +.sbsprite-your_essence { + background-position: -44px -110px +} + +.sbsprite-pink_greater_backpack { + background-position: -66px -110px +} + +.sbsprite-unstable_fragment { + background-position: -88px -110px +} + +.sbsprite-obsidian_generator_11 { + background-position: -110px -110px +} + +.sbsprite-obsidian_generator_12 { + background-position: -132px -110px +} + +.sbsprite-perfect_sapphire_gem { + background-position: -154px -110px +} + +.sbsprite-gravel_generator_11 { + background-position: -176px -110px +} + +.sbsprite-gravel_generator_10 { + background-position: -198px -110px +} + +.sbsprite-candy_corn { + background-position: -220px -110px +} + +.sbsprite-mineral_talisman { + background-position: -242px -110px +} + +.sbsprite-divan_alloy { + background-position: -264px -110px +} + +.sbsprite-moil_log { + background-position: -286px -110px +} + +.sbsprite-super_magic_mushroom_soup { + background-position: -308px -110px +} + +.sbsprite-easter_basket { + background-position: -330px -110px +} + +.sbsprite-hunter_talisman { + background-position: -352px -110px +} + +.sbsprite-medium_potion_bag { + background-position: -374px -110px +} + +.sbsprite-pet_skin_megalodon_bullhead { + background-position: -396px -110px +} + +.sbsprite-broken_piggy_bank { + background-position: -418px -110px +} + +.sbsprite-mayor_technoblade { + background-position: -440px -110px +} + +.sbsprite-farming_talisman { + background-position: -462px -110px +} + +.sbsprite-flawed_sapphire_gem { + background-position: -484px -110px +} + +.sbsprite-light_blue_large_backpack { + background-position: -506px -110px +} + +.sbsprite-kindred { + background-position: -528px -110px +} + +.sbsprite-pocket_espresso_machine { + background-position: -550px -110px +} + +.sbsprite-overflux_power_orb { + background-position: -572px -110px +} + +.sbsprite-potato_spreading { + background-position: -594px -110px +} + +.sbsprite-acacia_generator_11 { + background-position: -616px -110px +} + +.sbsprite-birch_generator_6 { + background-position: -638px -110px +} + +.sbsprite-acacia_generator_10 { + background-position: -660px -110px +} + +.sbsprite-birch_generator_5 { + background-position: -682px -110px +} + +.sbsprite-birch_generator_4 { + background-position: -704px -110px +} + +.sbsprite-birch_generator_3 { + background-position: -726px -110px +} + +.sbsprite-holy_dragon_helmet { + background-position: -748px -110px +} + +.sbsprite-basketball_personality { + background-position: -770px -110px +} + +.sbsprite-birch_generator_9 { + background-position: -792px -110px +} + +.sbsprite-birch_generator_8 { + background-position: -814px -110px +} + +.sbsprite-birch_generator_7 { + background-position: -836px -110px +} + +.sbsprite-birch_generator_2 { + background-position: -858px -110px +} + +.sbsprite-birch_generator_1 { + background-position: -880px -110px +} + +.sbsprite-anubis { + background-position: -902px -110px +} + +.sbsprite-santa_8 { + background-position: -924px -110px +} + +.sbsprite-santa_9 { + background-position: -946px -110px +} + +.sbsprite-santa_6 { + background-position: -968px -110px +} + +.sbsprite-santa_7 { + background-position: -990px -110px +} + +.sbsprite-santa_4 { + background-position: -1012px -110px +} + +.sbsprite-candy_talisman { + background-position: -1034px -110px +} + +.sbsprite-santa_5 { + background-position: 0 -132px +} + +.sbsprite-santa_2 { + background-position: -22px -132px +} + +.sbsprite-santa_3 { + background-position: -44px -132px +} + +.sbsprite-small_combat_sack { + background-position: -66px -132px +} + +.sbsprite-speed_racer { + background-position: -88px -132px +} + +.sbsprite-pet_skin_parrot_blue_macaw { + background-position: -110px -132px +} + +.sbsprite-red_large_backpack { + background-position: -132px -132px +} + +.sbsprite-sea_archer_helmet { + background-position: -154px -132px +} + +.sbsprite-happy_mask { + background-position: -176px -132px +} + +.sbsprite-blue_large_backpack { + background-position: -198px -132px +} + +.sbsprite-enderman_generator_4 { + background-position: -220px -132px +} + +.sbsprite-enderman_generator_3 { + background-position: -242px -132px +} + +.sbsprite-enderman_generator_2 { + background-position: -264px -132px +} + +.sbsprite-enderman_generator_1 { + background-position: -286px -132px +} + +.sbsprite-enderman_generator_8 { + background-position: -308px -132px +} + +.sbsprite-enderman_generator_7 { + background-position: -330px -132px +} + +.sbsprite-enderman_generator_6 { + background-position: -352px -132px +} + +.sbsprite-enderman_generator_5 { + background-position: -374px -132px +} + +.sbsprite-green_candy { + background-position: -396px -132px +} + +.sbsprite-bestiary_milestone { + background-position: -418px -132px +} + +.sbsprite-colossal_exp_bottle_upgrade { + background-position: -440px -132px +} + +.sbsprite-sun_11 { + background-position: -462px -132px +} + +.sbsprite-sun_10 { + background-position: -484px -132px +} + +.sbsprite-vampire_witch_mask { + background-position: -506px -132px +} + +.sbsprite-pet_skin_sheep_yellow { + background-position: -528px -132px +} + +.sbsprite-bank_upgrade_palatial { + background-position: -550px -132px +} + +.sbsprite-flawed_ruby_gem { + background-position: -572px -132px +} + +.sbsprite-redstone_generator_9 { + background-position: -594px -132px +} + +.sbsprite-redstone_generator_7 { + background-position: -616px -132px +} + +.sbsprite-redstone_generator_8 { + background-position: -638px -132px +} + +.sbsprite-arachne_fragment { + background-position: -660px -132px +} + +.sbsprite-spider_generator_10 { + background-position: -682px -132px +} + +.sbsprite-spider_generator_11 { + background-position: -704px -132px +} + +.sbsprite-epoch_cake_red { + background-position: -726px -132px +} + +.sbsprite-orange_jumbo_backpack { + background-position: -748px -132px +} + +.sbsprite-giant_the_fish { + background-position: -770px -132px +} + +.sbsprite-minnow_bait { + background-position: -792px -132px +} + +.sbsprite-enderman_generator_9 { + background-position: -814px -132px +} + +.sbsprite-mastiff_puppy { + background-position: -836px -132px +} + +.sbsprite-talisman_enrichment_critical_damage { + background-position: -858px -132px +} + +.sbsprite-fast_travel_forge { + background-position: -880px -132px +} + +.sbsprite-goblin_omelette { + background-position: -902px -132px +} + +.sbsprite-builder_ancient_fruit { + background-position: -924px -132px +} + +.sbsprite-master_skull_tier_10 { + background-position: -946px -132px +} + +.sbsprite-hardened_wood { + background-position: -968px -132px +} + +.sbsprite-large_winter_sack { + background-position: -990px -132px +} + +.sbsprite-talisman_enrichment_intelligence { + background-position: -1012px -132px +} + +.sbsprite-snow_snowglobe { + background-position: -1034px -132px +} + +.sbsprite-summoning_eye { + background-position: 0 -154px +} + +.sbsprite-cavespider_generator_10 { + background-position: -22px -154px +} + +.sbsprite-clownfish_10 { + background-position: -44px -154px +} + +.sbsprite-cavespider_generator_11 { + background-position: -66px -154px +} + +.sbsprite-revenant_generator_12 { + background-position: -88px -154px +} + +.sbsprite-clownfish_11 { + background-position: -110px -154px +} + +.sbsprite-revenant_generator_11 { + background-position: -132px -154px +} + +.sbsprite-revenant_generator_10 { + background-position: -154px -154px +} + +.sbsprite-red_small_backpack { + background-position: -176px -154px +} + +.sbsprite-soulflow { + background-position: -198px -154px +} + +.sbsprite-farming_fortune { + background-position: -220px -154px +} + +.sbsprite-dungeon_stone_berserk { + background-position: -242px -154px +} + +.sbsprite-green_greater_backpack { + background-position: -264px -154px +} + +.sbsprite-mastiff_helmet { + background-position: -286px -154px +} + +.sbsprite-purple { + background-position: -308px -154px +} + +.sbsprite-skeleton_generator_7 { + background-position: -330px -154px +} + +.sbsprite-skeleton_generator_6 { + background-position: -352px -154px +} + +.sbsprite-skeleton_generator_9 { + background-position: -374px -154px +} + +.sbsprite-skeleton_generator_8 { + background-position: -396px -154px +} + +.sbsprite-speed_ring { + background-position: -418px -154px +} + +.sbsprite-skeleton_generator_3 { + background-position: -440px -154px +} + +.sbsprite-rabbit_hutch { + background-position: -462px -154px +} + +.sbsprite-skeleton_generator_2 { + background-position: -484px -154px +} + +.sbsprite-skeleton_generator_5 { + background-position: -506px -154px +} + +.sbsprite-minion_storage_expander { + background-position: -528px -154px +} + +.sbsprite-skeleton_generator_4 { + background-position: -550px -154px +} + +.sbsprite-werewolf_helmet { + background-position: -572px -154px +} + +.sbsprite-light_blue_small_backpack { + background-position: -594px -154px +} + +.sbsprite-skeleton_generator_1 { + background-position: -616px -154px +} + +.sbsprite-lapis_chest { + background-position: -638px -154px +} + +.sbsprite-healing_talisman { + background-position: -660px -154px +} + +.sbsprite-magma_cube_head { + background-position: -682px -154px +} + +.sbsprite-shadow_goggles { + background-position: -704px -154px +} + +.sbsprite-ice_generator_11 { + background-position: -726px -154px +} + +.sbsprite-fine_jasper_gem { + background-position: -748px -154px +} + +.sbsprite-candy_artifact { + background-position: -770px -154px +} + +.sbsprite-pet_skin_dragon_neon_blue { + background-position: -792px -154px +} + +.sbsprite-fast_travel_desert { + background-position: -814px -154px +} + +.sbsprite-rune_end { + background-position: -836px -154px +} + +.sbsprite-old_shimmer { + background-position: -858px -154px +} + +.sbsprite-skyblock_bench { + background-position: -880px -154px +} + +.sbsprite-hay_bale { + background-position: -902px -154px +} + +.sbsprite-crit_chance { + background-position: -924px -154px +} + +.sbsprite-dungeon_stone { + background-position: -946px -154px +} + +.sbsprite-artifact_potion_affinity { + background-position: -968px -154px +} + +.sbsprite-yoggie { + background-position: -990px -154px +} + +.sbsprite-starred_adaptive_helmet { + background-position: -1012px -154px +} + +.sbsprite-foraging_3_portal { + background-position: -1034px -154px +} + +.sbsprite-pet_skin_dragon_neon_red { + background-position: 0 -176px +} + +.sbsprite-ditto_skull { + background-position: -22px -176px +} + +.sbsprite-pig_generator_6 { + background-position: -44px -176px +} + +.sbsprite-redstone_generator_1 { + background-position: -66px -176px +} + +.sbsprite-pig_generator_5 { + background-position: -88px -176px +} + +.sbsprite-redstone_generator_2 { + background-position: -110px -176px +} + +.sbsprite-pig_generator_8 { + background-position: -132px -176px +} + +.sbsprite-pig_generator_7 { + background-position: -154px -176px +} + +.sbsprite-flawless_amethyst_gem { + background-position: -176px -176px +} + +.sbsprite-redstone_generator_5 { + background-position: -198px -176px +} + +.sbsprite-wither_catalyst { + background-position: -220px -176px +} + +.sbsprite-pig_generator_9 { + background-position: -242px -176px +} + +.sbsprite-redstone_generator_6 { + background-position: -264px -176px +} + +.sbsprite-cyan_jumbo_backpack { + background-position: -286px -176px +} + +.sbsprite-redstone_generator_3 { + background-position: -308px -176px +} + +.sbsprite-redstone_generator_4 { + background-position: -330px -176px +} + +.sbsprite-ice_generator_10 { + background-position: -352px -176px +} + +.sbsprite-pig_generator_2 { + background-position: -374px -176px +} + +.sbsprite-builder_lettuce { + background-position: -396px -176px +} + +.sbsprite-first_master_star { + background-position: -418px -176px +} + +.sbsprite-pig_generator_1 { + background-position: -440px -176px +} + +.sbsprite-pig_generator_4 { + background-position: -462px -176px +} + +.sbsprite-green_medium_backpack { + background-position: -484px -176px +} + +.sbsprite-pig_generator_3 { + background-position: -506px -176px +} + +.sbsprite-sugar_cane_generator_9 { + background-position: -528px -176px +} + +.sbsprite-greater_backpack { + background-position: -550px -176px +} + +.sbsprite-sugar_cane_generator_6 { + background-position: -572px -176px +} + +.sbsprite-sugar_cane_generator_5 { + background-position: -594px -176px +} + +.sbsprite-pet_skin_sheep_neon_blue { + background-position: -616px -176px +} + +.sbsprite-sugar_cane_generator_8 { + background-position: -638px -176px +} + +.sbsprite-sugar_cane_generator_7 { + background-position: -660px -176px +} + +.sbsprite-sugar_cane_generator_2 { + background-position: -682px -176px +} + +.sbsprite-sugar_cane_generator_1 { + background-position: -704px -176px +} + +.sbsprite-cauldron { + background-position: -726px -176px +} + +.sbsprite-sugar_cane_generator_4 { + background-position: -748px -176px +} + +.sbsprite-sugar_cane_generator_3 { + background-position: -770px -176px +} + +.sbsprite-wheat_island_crystal { + background-position: -792px -176px +} + +.sbsprite-boss_collection_scarf { + background-position: -814px -176px +} + +.sbsprite-deep_sea_orb { + background-position: -836px -176px +} + +.sbsprite-pet_skin_elephant_red { + background-position: -858px -176px +} + +.sbsprite-pink_large_backpack { + background-position: -880px -176px +} + +.sbsprite-gemstone_collection { + background-position: -902px -176px +} + +.sbsprite-carpentry_bench { + background-position: -924px -176px +} + +.sbsprite-pet_skin_wolf_henzo_doggo { + background-position: -946px -176px +} + +.sbsprite-sloth_11 { + background-position: -968px -176px +} + +.sbsprite-sloth_10 { + background-position: -990px -176px +} + +.sbsprite-vampire_mask { + background-position: -1012px -176px +} + +.sbsprite-reindeer_personality { + background-position: -1034px -176px +} + +.sbsprite-minos_hunter_helmet { + background-position: 0 -198px +} + +.sbsprite-catacombs_2 { + background-position: -22px -198px +} + +.sbsprite-catacombs_3 { + background-position: -44px -198px +} + +.sbsprite-catacombs_1 { + background-position: -66px -198px +} + +.sbsprite-catacombs_6 { + background-position: -88px -198px +} + +.sbsprite-small_runes_sack { + background-position: -110px -198px +} + +.sbsprite-catacombs_4 { + background-position: -132px -198px +} + +.sbsprite-catacombs_5 { + background-position: -154px -198px +} + +.sbsprite-clownfish_hat { + background-position: -176px -198px +} + +.sbsprite-fine_topaz_gem { + background-position: -198px -198px +} + +.sbsprite-beastmaster_crest_uncommon { + background-position: -220px -198px +} + +.sbsprite-superlite_motor { + background-position: -242px -198px +} + +.sbsprite-red_greater_backpack { + background-position: -264px -198px +} + +.sbsprite-hunter_ring { + background-position: -286px -198px +} + +.sbsprite-necromancer_brooch { + background-position: -308px -198px +} + +.sbsprite-spooky_shard { + background-position: -330px -198px +} + +.sbsprite-grey_medium_backpack { + background-position: -352px -198px +} + +.sbsprite-diamond_chest { + background-position: -374px -198px +} + +.sbsprite-slime_hat { + background-position: -396px -198px +} + +.sbsprite-hermit_crab_2 { + background-position: -418px -198px +} + +.sbsprite-enderman_cortex_rewriter { + background-position: -440px -198px +} + +.sbsprite-hermit_crab_1 { + background-position: -462px -198px +} + +.sbsprite-carrot_generator_11 { + background-position: -484px -198px +} + +.sbsprite-carrot_generator_12 { + background-position: -506px -198px +} + +.sbsprite-mushroom_generator_4 { + background-position: -528px -198px +} + +.sbsprite-carrot_generator_10 { + background-position: -550px -198px +} + +.sbsprite-mushroom_generator_3 { + background-position: -572px -198px +} + +.sbsprite-mushroom_generator_6 { + background-position: -594px -198px +} + +.sbsprite-mushroom_generator_5 { + background-position: -616px -198px +} + +.sbsprite-mushroom_generator_8 { + background-position: -638px -198px +} + +.sbsprite-mushroom_generator_7 { + background-position: -660px -198px +} + +.sbsprite-mushroom_generator_9 { + background-position: -682px -198px +} + +.sbsprite-diamond_professor_head { + background-position: -704px -198px +} + +.sbsprite-large_foraging_sack { + background-position: -726px -198px +} + +.sbsprite-robotron_reflector { + background-position: -748px -198px +} + +.sbsprite-wish_ultimate { + background-position: -770px -198px +} + +.sbsprite-tessellated_ender_pearl { + background-position: -792px -198px +} + +.sbsprite-pet_skin_sheep_red { + background-position: -814px -198px +} + +.sbsprite-spirit_decoy { + background-position: -836px -198px +} + +.sbsprite-stacked_pumpkins { + background-position: -858px -198px +} + +.sbsprite-medium_runes_sack { + background-position: -880px -198px +} + +.sbsprite-mushroom_generator_2 { + background-position: -902px -198px +} + +.sbsprite-young_dragon_helmet { + background-position: -924px -198px +} + +.sbsprite-mushroom_generator_1 { + background-position: -946px -198px +} + +.sbsprite-hermit_crab_6 { + background-position: -968px -198px +} + +.sbsprite-gravity_talisman { + background-position: -990px -198px +} + +.sbsprite-hermit_crab_5 { + background-position: -1012px -198px +} + +.sbsprite-hermit_crab_4 { + background-position: -1034px -198px +} + +.sbsprite-hermit_crab_3 { + background-position: 0 -220px +} + +.sbsprite-melon_10 { + background-position: -22px -220px +} + +.sbsprite-party_time_event { + background-position: -44px -220px +} + +.sbsprite-grinch_10 { + background-position: -66px -220px +} + +.sbsprite-melon_11 { + background-position: -88px -220px +} + +.sbsprite-hermit_crab_9 { + background-position: -110px -220px +} + +.sbsprite-hermit_crab_8 { + background-position: -132px -220px +} + +.sbsprite-grinch_11 { + background-position: -154px -220px +} + +.sbsprite-hermit_crab_7 { + background-position: -176px -220px +} + +.sbsprite-flower_generator_10 { + background-position: -198px -220px +} + +.sbsprite-race_giant_mushroom { + background-position: -220px -220px +} + +.sbsprite-flower_generator_11 { + background-position: -242px -220px +} + +.sbsprite-flower_generator_12 { + background-position: -264px -220px +} + +.sbsprite-redstone_chest { + background-position: -286px -220px +} + +.sbsprite-undead_catalyst { + background-position: -308px -220px +} + +.sbsprite-master_skull_tier_7 { + background-position: -330px -220px +} + +.sbsprite-reindeer_9 { + background-position: -352px -220px +} + +.sbsprite-master_skull_tier_6 { + background-position: -374px -220px +} + +.sbsprite-rune_slimy { + background-position: -396px -220px +} + +.sbsprite-master_skull_tier_9 { + background-position: -418px -220px +} + +.sbsprite-medium_shelves { + background-position: -440px -220px +} + +.sbsprite-master_skull_tier_8 { + background-position: -462px -220px +} + +.sbsprite-plasmaflux_power_orb { + background-position: -484px -220px +} + +.sbsprite-adaptive_helmet { + background-position: -506px -220px +} + +.sbsprite-pet_skin_endermite_radiant { + background-position: -528px -220px +} + +.sbsprite-master_skull_tier_1 { + background-position: -550px -220px +} + +.sbsprite-master_skull_tier_3 { + background-position: -572px -220px +} + +.sbsprite-oil_barrel { + background-position: -594px -220px +} + +.sbsprite-master_skull_tier_2 { + background-position: -616px -220px +} + +.sbsprite-master_skull_tier_5 { + background-position: -638px -220px +} + +.sbsprite-master_skull_tier_4 { + background-position: -660px -220px +} + +.sbsprite-pet_skin_guardian { + background-position: -682px -220px +} + +.sbsprite-flawless_jade_gem { + background-position: -704px -220px +} + +.sbsprite-survivor_cube { + background-position: -726px -220px +} + +.sbsprite-undead_2 { + background-position: -748px -220px +} + +.sbsprite-undead_3 { + background-position: -770px -220px +} + +.sbsprite-undead_4 { + background-position: -792px -220px +} + +.sbsprite-undead_5 { + background-position: -814px -220px +} + +.sbsprite-undead_6 { + background-position: -836px -220px +} + +.sbsprite-undead_7 { + background-position: -858px -220px +} + +.sbsprite-undead_8 { + background-position: -880px -220px +} + +.sbsprite-undead_9 { + background-position: -902px -220px +} + +.sbsprite-enchanted_book_bundle_vicious { + background-position: -924px -220px +} + +.sbsprite-endstone_chest { + background-position: -946px -220px +} + +.sbsprite-titanium_fuel_tank { + background-position: -968px -220px +} + +.sbsprite-golden_ball { + background-position: -990px -220px +} + +.sbsprite-undead_1 { + background-position: -1012px -220px +} + +.sbsprite-happy_emoji_5 { + background-position: -1034px -220px +} + +.sbsprite-reindeer_1 { + background-position: 0 -242px +} + +.sbsprite-warden_heart { + background-position: -22px -242px +} + +.sbsprite-happy_emoji_4 { + background-position: -44px -242px +} + +.sbsprite-reindeer_2 { + background-position: -66px -242px +} + +.sbsprite-happy_emoji_7 { + background-position: -88px -242px +} + +.sbsprite-reindeer_3 { + background-position: -110px -242px +} + +.sbsprite-happy_emoji_6 { + background-position: -132px -242px +} + +.sbsprite-kalhuiki_mask { + background-position: -154px -242px +} + +.sbsprite-reindeer_4 { + background-position: -176px -242px +} + +.sbsprite-happy_emoji_1 { + background-position: -198px -242px +} + +.sbsprite-reindeer_5 { + background-position: -220px -242px +} + +.sbsprite-reindeer_6 { + background-position: -242px -242px +} + +.sbsprite-happy_emoji_3 { + background-position: -264px -242px +} + +.sbsprite-reindeer_7 { + background-position: -286px -242px +} + +.sbsprite-happy_emoji_2 { + background-position: -308px -242px +} + +.sbsprite-reindeer_8 { + background-position: -330px -242px +} + +.sbsprite-happy_emoji_9 { + background-position: -352px -242px +} + +.sbsprite-festive_skeleton_personality { + background-position: -374px -242px +} + +.sbsprite-happy_emoji_8 { + background-position: -396px -242px +} + +.sbsprite-mimic_fragment { + background-position: -418px -242px +} + +.sbsprite-pet_skin_parrot_gold_macaw { + background-position: -440px -242px +} + +.sbsprite-mithril_drill_engine { + background-position: -462px -242px +} + +.sbsprite-titan_helmet { + background-position: -484px -242px +} + +.sbsprite-warden_helmet { + background-position: -506px -242px +} + +.sbsprite-nether_wart_pouch { + background-position: -528px -242px +} + +.sbsprite-red_nose { + background-position: -550px -242px +} + +.sbsprite-emerald_generator_12 { + background-position: -572px -242px +} + +.sbsprite-farming_1_portal { + background-position: -594px -242px +} + +.sbsprite-pet_skin_horse_zombie { + background-position: -616px -242px +} + +.sbsprite-devour_ring { + background-position: -638px -242px +} + +.sbsprite-mining_1_portal { + background-position: -660px -242px +} + +.sbsprite-builder_lilac_fruit { + background-position: -682px -242px +} + +.sbsprite-diamond_livid_head { + background-position: -704px -242px +} + +.sbsprite-fast_travel_dungeon_hub { + background-position: -726px -242px +} + +.sbsprite-emerald_generator_10 { + background-position: -748px -242px +} + +.sbsprite-emerald_generator_11 { + background-position: -770px -242px +} + +.sbsprite-bestiary_catacombs { + background-position: -792px -242px +} + +.sbsprite-fine_amber_gem { + background-position: -814px -242px +} + +.sbsprite-beach_ball_personality { + background-position: -836px -242px +} + +.sbsprite-cow_generator_11 { + background-position: -858px -242px +} + +.sbsprite-cow_generator_12 { + background-position: -880px -242px +} + +.sbsprite-mummy_personality { + background-position: -902px -242px +} + +.sbsprite-rune_wet { + background-position: -924px -242px +} + +.sbsprite-jumbo_backpack_upgrade { + background-position: -946px -242px +} + +.sbsprite-shadow_assassin_admiral { + background-position: -968px -242px +} + +.sbsprite-beating_heart { + background-position: -990px -242px +} + +.sbsprite-giant_tooth { + background-position: -1012px -242px +} + +.sbsprite-black_large_backpack { + background-position: -1034px -242px +} + +.sbsprite-corleonite { + background-position: 0 -264px +} + +.sbsprite-magma_cube_generator_1 { + background-position: -22px -264px +} + +.sbsprite-magma_cube_generator_5 { + background-position: -44px -264px +} + +.sbsprite-gold_candy { + background-position: -66px -264px +} + +.sbsprite-magma_cube_generator_4 { + background-position: -88px -264px +} + +.sbsprite-magma_cube_generator_3 { + background-position: -110px -264px +} + +.sbsprite-magma_cube_generator_2 { + background-position: -132px -264px +} + +.sbsprite-magma_cube_generator_9 { + background-position: -154px -264px +} + +.sbsprite-dining_table { + background-position: -176px -264px +} + +.sbsprite-magma_cube_generator_8 { + background-position: -198px -264px +} + +.sbsprite-magma_cube_generator_7 { + background-position: -220px -264px +} + +.sbsprite-magma_cube_generator_6 { + background-position: -242px -264px +} + +.sbsprite-sadan_brooch { + background-position: -264px -264px +} + +.sbsprite-birch_generator_11 { + background-position: -286px -264px +} + +.sbsprite-birch_generator_10 { + background-position: -308px -264px +} + +.sbsprite-strong_dragon_helmet { + background-position: -330px -264px +} + +.sbsprite-greater_enchanted_chest_upgrade { + background-position: -352px -264px +} + +.sbsprite-pink_frosted_donut_11 { + background-position: -374px -264px +} + +.sbsprite-molten_cube { + background-position: -396px -264px +} + +.sbsprite-pink_frosted_donut_10 { + background-position: -418px -264px +} + +.sbsprite-ultimate_carrot_candy_upgrade { + background-position: -440px -264px +} + +.sbsprite-old_baby { + background-position: -462px -264px +} + +.sbsprite-coin_lapis { + background-position: -484px -264px +} + +.sbsprite-superior_shimmer { + background-position: -506px -264px +} + +.sbsprite-diver_fragment { + background-position: -528px -264px +} + +.sbsprite-blue_greater_backpack { + background-position: -550px -264px +} + +.sbsprite-piggy_bank { + background-position: -572px -264px +} + +.sbsprite-flawed_jade_gem { + background-position: -594px -264px +} + +.sbsprite-dungeon_boss_key { + background-position: -616px -264px +} + +.sbsprite-spider_catalyst { + background-position: -638px -264px +} + +.sbsprite-shark_scale_helmet { + background-position: -660px -264px +} + +.sbsprite-ghost_book { + background-position: -682px -264px +} + +.sbsprite-titanium_alloy { + background-position: -704px -264px +} + +.sbsprite-pet_skin_enderman_slayer { + background-position: -726px -264px +} + +.sbsprite-hegemony_artifact { + background-position: -748px -264px +} + +.sbsprite-potion_affinity_talisman { + background-position: -770px -264px +} + +.sbsprite-trick_or_treat_bag { + background-position: -792px -264px +} + +.sbsprite-fake_gold_ring { + background-position: -814px -264px +} + +.sbsprite-dr_paper { + background-position: -836px -264px +} + +.sbsprite-fuel_tank { + background-position: -858px -264px +} + +.sbsprite-rough_amethyst_gem { + background-position: -880px -264px +} + +.sbsprite-flawless_sapphire_gem { + background-position: -902px -264px +} + +.sbsprite-pink_small_backpack { + background-position: -924px -264px +} + +.sbsprite-cow_generator_10 { + background-position: -946px -264px +} + +.sbsprite-mithril_infusion { + background-position: -968px -264px +} + +.sbsprite-beastmaster_crest_common { + background-position: -990px -264px +} + +.sbsprite-shiny_relic { + background-position: -1012px -264px +} + +.sbsprite-concentrated_stone { + background-position: -1034px -264px +} + +.sbsprite-sloth_personality { + background-position: 0 -286px +} + +.sbsprite-stocking { + background-position: -22px -286px +} + +.sbsprite-egg_pile { + background-position: -44px -286px +} + +.sbsprite-blessing_of_wisdom { + background-position: -66px -286px +} + +.sbsprite-happy_snowman { + background-position: -88px -286px +} + +.sbsprite-gingerbread_10 { + background-position: -110px -286px +} + +.sbsprite-gingerbread_11 { + background-position: -132px -286px +} + +.sbsprite-diamond_generator_11 { + background-position: -154px -286px +} + +.sbsprite-diamond_generator_10 { + background-position: -176px -286px +} + +.sbsprite-medium_backpack { + background-position: -198px -286px +} + +.sbsprite-rune_white_spiral { + background-position: -220px -286px +} + +.sbsprite-diamond_generator_12 { + background-position: -242px -286px +} + +.sbsprite-blacksmith_plus { + background-position: -264px -286px +} + +.sbsprite-light_blue_greater_backpack { + background-position: -286px -286px +} + +.sbsprite-watcher_eye { + background-position: -308px -286px +} + +.sbsprite-pet_skin_silverfish { + background-position: -330px -286px +} + +.sbsprite-rough_ruby_gem { + background-position: -352px -286px +} + +.sbsprite-fine_amethyst_gem { + background-position: -374px -286px +} + +.sbsprite-flawed_topaz_gem { + background-position: -396px -286px +} + +.sbsprite-spirit_bone { + background-position: -418px -286px +} + +.sbsprite-snow_blaster { + background-position: -440px -286px +} + +.sbsprite-unknown_item { + background-position: -462px -286px +} + +.sbsprite-spider_essence { + background-position: -484px -286px +} + +.sbsprite-light_bait { + background-position: -506px -286px +} + +.sbsprite-beastmaster_crest_legendary { + background-position: -528px -286px +} + +.sbsprite-mayor_diana { + background-position: -550px -286px +} + +.sbsprite-enchanted_jack_o_lantern { + background-position: -572px -286px +} + +.sbsprite-medium_foraging_sack { + background-position: -594px -286px +} + +.sbsprite-emerald_chest { + background-position: -616px -286px +} + +.sbsprite-carrot_generator_6 { + background-position: -638px -286px +} + +.sbsprite-reindeer_11 { + background-position: -660px -286px +} + +.sbsprite-carrot_generator_7 { + background-position: -682px -286px +} + +.sbsprite-reindeer_10 { + background-position: -704px -286px +} + +.sbsprite-carrot_generator_4 { + background-position: -726px -286px +} + +.sbsprite-carrot_generator_5 { + background-position: -748px -286px +} + +.sbsprite-carrot_generator_2 { + background-position: -770px -286px +} + +.sbsprite-carrot_generator_3 { + background-position: -792px -286px +} + +.sbsprite-carrot_generator_1 { + background-position: -814px -286px +} + +.sbsprite-carrot_generator_8 { + background-position: -836px -286px +} + +.sbsprite-dragon_scale { + background-position: -858px -286px +} + +.sbsprite-carrot_generator_9 { + background-position: -880px -286px +} + +.sbsprite-protector_dragon_helmet { + background-position: -902px -286px +} + +.sbsprite-rune_hearts { + background-position: -924px -286px +} + +.sbsprite-pet_skin_sheep_magenta { + background-position: -946px -286px +} + +.sbsprite-shadow_assassin_helmet { + background-position: -968px -286px +} + +.sbsprite-gemstone_gauntlet_gold { + background-position: -990px -286px +} + +.sbsprite-lucky_dice { + background-position: -1012px -286px +} + +.sbsprite-wolf_ring { + background-position: -1034px -286px +} + +.sbsprite-haunt_ability { + background-position: 0 -308px +} + +.sbsprite-undead_essence { + background-position: -22px -308px +} + +.sbsprite-bitter_ice_tea { + background-position: -44px -308px +} + +.sbsprite-beastmaster_crest_rare { + background-position: -66px -308px +} + +.sbsprite-enchanted_titanium { + background-position: -88px -308px +} + +.sbsprite-red_claw_talisman { + background-position: -110px -308px +} + +.sbsprite-intimidation_talisman { + background-position: -132px -308px +} + +.sbsprite-ice_bait { + background-position: -154px -308px +} + +.sbsprite-empty_soda_can { + background-position: -176px -308px +} + +.sbsprite-jerry_candy { + background-position: -198px -308px +} + +.sbsprite-ghast_generator_3 { + background-position: -220px -308px +} + +.sbsprite-fancy_flower_pot { + background-position: -242px -308px +} + +.sbsprite-ghast_generator_2 { + background-position: -264px -308px +} + +.sbsprite-cyan_greater_backpack { + background-position: -286px -308px +} + +.sbsprite-ghast_generator_5 { + background-position: -308px -308px +} + +.sbsprite-ghast_generator_4 { + background-position: -330px -308px +} + +.sbsprite-ghast_generator_7 { + background-position: -352px -308px +} + +.sbsprite-cold_ones { + background-position: -374px -308px +} + +.sbsprite-ghast_generator_6 { + background-position: -396px -308px +} + +.sbsprite-mega_jerry_lure { + background-position: -418px -308px +} + +.sbsprite-ghast_generator_9 { + background-position: -440px -308px +} + +.sbsprite-rune_smokey { + background-position: -462px -308px +} + +.sbsprite-ghast_generator_8 { + background-position: -484px -308px +} + +.sbsprite-healer_dungeon_ability_2 { + background-position: -506px -308px +} + +.sbsprite-healer_dungeon_ability_3 { + background-position: -528px -308px +} + +.sbsprite-ghast_generator_1 { + background-position: -550px -308px +} + +.sbsprite-brown_medium_backpack { + background-position: -572px -308px +} + +.sbsprite-healer_dungeon_ability_1 { + background-position: -594px -308px +} + +.sbsprite-ice_cream_2 { + background-position: -616px -308px +} + +.sbsprite-ice_cream_1 { + background-position: -638px -308px +} + +.sbsprite-ice_cream_4 { + background-position: -660px -308px +} + +.sbsprite-ice_cream_3 { + background-position: -682px -308px +} + +.sbsprite-ice_cream_6 { + background-position: -704px -308px +} + +.sbsprite-ice_cream_5 { + background-position: -726px -308px +} + +.sbsprite-ice_cream_8 { + background-position: -748px -308px +} + +.sbsprite-ice_cream_7 { + background-position: -770px -308px +} + +.sbsprite-ice_cream_9 { + background-position: -792px -308px +} + +.sbsprite-ice_cream_10 { + background-position: -814px -308px +} + +.sbsprite-ice_cream_11 { + background-position: -836px -308px +} + +.sbsprite-coin_iron { + background-position: -858px -308px +} + +.sbsprite-chewed_gum { + background-position: -880px -308px +} + +.sbsprite-training_weights { + background-position: -902px -308px +} + +.sbsprite-orange_large_backpack { + background-position: -924px -308px +} + +.sbsprite-campfire_talisman_24 { + background-position: -946px -308px +} + +.sbsprite-campfire_talisman_25 { + background-position: -968px -308px +} + +.sbsprite-campfire_talisman_26 { + background-position: -990px -308px +} + +.sbsprite-campfire_talisman_27 { + background-position: -1012px -308px +} + +.sbsprite-campfire_talisman_28 { + background-position: -1034px -308px +} + +.sbsprite-campfire_talisman_29 { + background-position: 0 -330px +} + +.sbsprite-candle_table { + background-position: -22px -330px +} + +.sbsprite-jingle_bells { + background-position: -44px -330px +} + +.sbsprite-lynx_talisman { + background-position: -66px -330px +} + +.sbsprite-campfire_talisman_20 { + background-position: -88px -330px +} + +.sbsprite-campfire_talisman_21 { + background-position: -110px -330px +} + +.sbsprite-campfire_talisman_22 { + background-position: -132px -330px +} + +.sbsprite-campfire_talisman_23 { + background-position: -154px -330px +} + +.sbsprite-perfect_ruby_gem { + background-position: -176px -330px +} + +.sbsprite-pet_skin_megalodon_baby { + background-position: -198px -330px +} + +.sbsprite-jungle_amulet { + background-position: -220px -330px +} + +.sbsprite-reaper_mask { + background-position: -242px -330px +} + +.sbsprite-enchanting_plus { + background-position: -264px -330px +} + +.sbsprite-catacombs_expert_ring { + background-position: -286px -330px +} + +.sbsprite-ice_knight_statue { + background-position: -308px -330px +} + +.sbsprite-bits_talisman { + background-position: -330px -330px +} + +.sbsprite-dark_orb { + background-position: -352px -330px +} + +.sbsprite-blessing_of_power { + background-position: -374px -330px +} + +.sbsprite-beastmaster_crest_epic { + background-position: -396px -330px +} + +.sbsprite-bulky_stone { + background-position: -418px -330px +} + +.sbsprite-yellow_small_backpack { + background-position: -440px -330px +} + +.sbsprite-small_potion_bag { + background-position: -462px -330px +} + +.sbsprite-green_jumbo_backpack { + background-position: -484px -330px +} + +.sbsprite-zombie_heart { + background-position: -506px -330px +} + +.sbsprite-pet_skin_black_cat_ivory { + background-position: -528px -330px +} + +.sbsprite-titanium_relic { + background-position: -550px -330px +} + +.sbsprite-fast_travel_jungle { + background-position: -572px -330px +} + +.sbsprite-pet_skin_rabbit { + background-position: -594px -330px +} + +.sbsprite-enderman_mask { + background-position: -616px -330px +} + +.sbsprite-perfect_amethyst_gem { + background-position: -638px -330px +} + +.sbsprite-boss_collection_sadan { + background-position: -660px -330px +} + +.sbsprite-blessing_of_stone { + background-position: -682px -330px +} + +.sbsprite-master_catacombs_pass_0 { + background-position: -704px -330px +} + +.sbsprite-snowman { + background-position: -726px -330px +} + +.sbsprite-candy_the_fish { + background-position: -748px -330px +} + +.sbsprite-gold_chest { + background-position: -770px -330px +} + +.sbsprite-master_catacombs_pass_6 { + background-position: -792px -330px +} + +.sbsprite-master_catacombs_pass_5 { + background-position: -814px -330px +} + +.sbsprite-master_catacombs_pass_8 { + background-position: -836px -330px +} + +.sbsprite-master_catacombs_pass_7 { + background-position: -858px -330px +} + +.sbsprite-master_catacombs_pass_2 { + background-position: -880px -330px +} + +.sbsprite-master_catacombs_pass_1 { + background-position: -902px -330px +} + +.sbsprite-master_catacombs_pass_4 { + background-position: -924px -330px +} + +.sbsprite-master_catacombs_pass_3 { + background-position: -946px -330px +} + +.sbsprite-candy_bowl { + background-position: -968px -330px +} + +.sbsprite-large_talisman_bag { + background-position: -990px -330px +} + +.sbsprite-secret_dungeon_redstone_key { + background-position: -1012px -330px +} + +.sbsprite-knockoff_cola { + background-position: -1034px -330px +} + +.sbsprite-grinch_2 { + background-position: 0 -352px +} + +.sbsprite-grinch_3 { + background-position: -22px -352px +} + +.sbsprite-grinch_4 { + background-position: -44px -352px +} + +.sbsprite-personal_bank_item { + background-position: -66px -352px +} + +.sbsprite-grinch_5 { + background-position: -88px -352px +} + +.sbsprite-grinch_6 { + background-position: -110px -352px +} + +.sbsprite-blessing_of_time { + background-position: -132px -352px +} + +.sbsprite-grinch_7 { + background-position: -154px -352px +} + +.sbsprite-grinch_8 { + background-position: -176px -352px +} + +.sbsprite-grinch_9 { + background-position: -198px -352px +} + +.sbsprite-crit_damage { + background-position: -220px -352px +} + +.sbsprite-grinch_1 { + background-position: -242px -352px +} + +.sbsprite-bunny_4 { + background-position: -264px -352px +} + +.sbsprite-bunny_3 { + background-position: -286px -352px +} + +.sbsprite-the_watchers_head { + background-position: -308px -352px +} + +.sbsprite-bunny_2 { + background-position: -330px -352px +} + +.sbsprite-bunny_1 { + background-position: -352px -352px +} + +.sbsprite-bunny_8 { + background-position: -374px -352px +} + +.sbsprite-bunny_7 { + background-position: -396px -352px +} + +.sbsprite-master_catacombs_pass_9 { + background-position: -418px -352px +} + +.sbsprite-bat_person_helmet { + background-position: -440px -352px +} + +.sbsprite-bunny_6 { + background-position: -462px -352px +} + +.sbsprite-bunny_5 { + background-position: -484px -352px +} + +.sbsprite-refined_amber { + background-position: -506px -352px +} + +.sbsprite-pet_skin_rock_derp { + background-position: -528px -352px +} + +.sbsprite-pet_skin_sheep_gray { + background-position: -550px -352px +} + +.sbsprite-flawed_amber_gem { + background-position: -572px -352px +} + +.sbsprite-pumpkin_11 { + background-position: -594px -352px +} + +.sbsprite-pumpkin_10 { + background-position: -616px -352px +} + +.sbsprite-white_small_backpack { + background-position: -638px -352px +} + +.sbsprite-blaze_hat { + background-position: -660px -352px +} + +.sbsprite-woodcutting_crystal { + background-position: -682px -352px +} + +.sbsprite-bunny_9 { + background-position: -704px -352px +} + +.sbsprite-roofed_forest_island { + background-position: -726px -352px +} + +.sbsprite-campfire_talisman_13 { + background-position: -748px -352px +} + +.sbsprite-campfire_talisman_14 { + background-position: -770px -352px +} + +.sbsprite-rune_lava { + background-position: -792px -352px +} + +.sbsprite-campfire_talisman_15 { + background-position: -814px -352px +} + +.sbsprite-campfire_talisman_16 { + background-position: -836px -352px +} + +.sbsprite-campfire_talisman_17 { + background-position: -858px -352px +} + +.sbsprite-campfire_talisman_18 { + background-position: -880px -352px +} + +.sbsprite-golden_dante_statue { + background-position: -902px -352px +} + +.sbsprite-campfire_talisman_19 { + background-position: -924px -352px +} + +.sbsprite-foraging_4_portal { + background-position: -946px -352px +} + +.sbsprite-new_year_cake_bag { + background-position: -968px -352px +} + +.sbsprite-santa_personality { + background-position: -990px -352px +} + +.sbsprite-campfire_talisman_10 { + background-position: -1012px -352px +} + +.sbsprite-campfire_talisman_11 { + background-position: -1034px -352px +} + +.sbsprite-campfire_talisman_12 { + background-position: 0 -374px +} + +.sbsprite-jerry_stone { + background-position: -22px -374px +} + +.sbsprite-cyclops_personality { + background-position: -44px -374px +} + +.sbsprite-desert_island_crystal { + background-position: -66px -374px +} + +.sbsprite-happy_emoji_personality { + background-position: -88px -374px +} + +.sbsprite-rough_sapphire_gem { + background-position: -110px -374px +} + +.sbsprite-fallen_star_hat { + background-position: -132px -374px +} + +.sbsprite-blaze_generator_10 { + background-position: -154px -374px +} + +.sbsprite-blaze_generator_11 { + background-position: -176px -374px +} + +.sbsprite-goblin_omelette_blue_cheese { + background-position: -198px -374px +} + +.sbsprite-treasure_artifact { + background-position: -220px -374px +} + +.sbsprite-hermit_crab_personality { + background-position: -242px -374px +} + +.sbsprite-orange { + background-position: -264px -374px +} + +.sbsprite-pond_island { + background-position: -286px -374px +} + +.sbsprite-fast_travel_void { + background-position: -308px -374px +} + +.sbsprite-transmission_tuner { + background-position: -330px -374px +} + +.sbsprite-bestiary_the_end { + background-position: -352px -374px +} + +.sbsprite-danger_1_portal { + background-position: -374px -374px +} + +.sbsprite-pink_jumbo_backpack { + background-position: -396px -374px +} + +.sbsprite-sea_walker_helmet { + background-position: -418px -374px +} + +.sbsprite-wise_fragment { + background-position: -440px -374px +} + +.sbsprite-jerry_talisman_golden { + background-position: -462px -374px +} + +.sbsprite-superior_baby { + background-position: -484px -374px +} + +.sbsprite-flower_bed { + background-position: -506px -374px +} + +.sbsprite-cactus_generator_1 { + background-position: -528px -374px +} + +.sbsprite-endstone_geode { + background-position: -550px -374px +} + +.sbsprite-holy_baby { + background-position: -572px -374px +} + +.sbsprite-cactus_generator_3 { + background-position: -594px -374px +} + +.sbsprite-cactus_generator_2 { + background-position: -616px -374px +} + +.sbsprite-cactus_generator_5 { + background-position: -638px -374px +} + +.sbsprite-cactus_generator_4 { + background-position: -660px -374px +} + +.sbsprite-cactus_generator_7 { + background-position: -682px -374px +} + +.sbsprite-cactus_generator_6 { + background-position: -704px -374px +} + +.sbsprite-cactus_generator_9 { + background-position: -726px -374px +} + +.sbsprite-protector_shimmer { + background-position: -748px -374px +} + +.sbsprite-cactus_generator_8 { + background-position: -770px -374px +} + +.sbsprite-rune_sparkling { + background-position: -792px -374px +} + +.sbsprite-bingo_ring { + background-position: -814px -374px +} + +.sbsprite-griffin_upgrade_stone_rare { + background-position: -836px -374px +} + +.sbsprite-chick_nest { + background-position: -858px -374px +} + +.sbsprite-solved_prism { + background-position: -880px -374px +} + +.sbsprite-king_talisman { + background-position: -902px -374px +} + +.sbsprite-treasure_ring { + background-position: -924px -374px +} + +.sbsprite-black_medium_backpack { + background-position: -946px -374px +} + +.sbsprite-surfboard { + background-position: -968px -374px +} + +.sbsprite-mithril_fuel_tank { + background-position: -990px -374px +} + +.sbsprite-fast_travel_home { + background-position: -1012px -374px +} + +.sbsprite-water_trough { + background-position: -1034px -374px +} + +.sbsprite-mayor_dante { + background-position: 0 -396px +} + +.sbsprite-cheese_fuel { + background-position: -22px -396px +} + +.sbsprite-pet_skin_lion_lioness { + background-position: -44px -396px +} + +.sbsprite-pink_bunny_personality { + background-position: -66px -396px +} + +.sbsprite-goldor_the_fish { + background-position: -88px -396px +} + +.sbsprite-speed_wither_helmet { + background-position: -110px -396px +} + +.sbsprite-pink_medium_backpack { + background-position: -132px -396px +} + +.sbsprite-mayor_derpy { + background-position: -154px -396px +} + +.sbsprite-talisman_enrichment_health { + background-position: -176px -396px +} + +.sbsprite-enderpack { + background-position: -198px -396px +} + +.sbsprite-pet_skin_rock_thinking { + background-position: -220px -396px +} + +.sbsprite-soul_fragment { + background-position: -242px -396px +} + +.sbsprite-skyblock_chair { + background-position: -264px -396px +} + +.sbsprite-mayor_paul { + background-position: -286px -396px +} + +.sbsprite-autopet_rules_2 { + background-position: -308px -396px +} + +.sbsprite-bat_talisman { + background-position: -330px -396px +} + +.sbsprite-killer_4 { + background-position: -352px -396px +} + +.sbsprite-killer_5 { + background-position: -374px -396px +} + +.sbsprite-killer_6 { + background-position: -396px -396px +} + +.sbsprite-killer_7 { + background-position: -418px -396px +} + +.sbsprite-killer_8 { + background-position: -440px -396px +} + +.sbsprite-killer_9 { + background-position: -462px -396px +} + +.sbsprite-builder_appalled_pumpkin { + background-position: -484px -396px +} + +.sbsprite-holy_shimmer { + background-position: -506px -396px +} + +.sbsprite-royal_pigeon { + background-position: -528px -396px +} + +.sbsprite-life_preserver { + background-position: -550px -396px +} + +.sbsprite-killer_1 { + background-position: -572px -396px +} + +.sbsprite-killer_2 { + background-position: -594px -396px +} + +.sbsprite-killer_3 { + background-position: -616px -396px +} + +.sbsprite-pet_skin_rock_cool { + background-position: -638px -396px +} + +.sbsprite-dingy { + background-position: -660px -396px +} + +.sbsprite-intimidation_ring { + background-position: -682px -396px +} + +.sbsprite-easter_egg_6 { + background-position: -704px -396px +} + +.sbsprite-builder_kiwi { + background-position: -726px -396px +} + +.sbsprite-easter_egg_5 { + background-position: -748px -396px +} + +.sbsprite-easter_egg_4 { + background-position: -770px -396px +} + +.sbsprite-rough_jade_gem { + background-position: -792px -396px +} + +.sbsprite-easter_egg_3 { + background-position: -814px -396px +} + +.sbsprite-easter_egg_2 { + background-position: -836px -396px +} + +.sbsprite-easter_egg_1 { + background-position: -858px -396px +} + +.sbsprite-snow_generator_11 { + background-position: -880px -396px +} + +.sbsprite-snow_generator_10 { + background-position: -902px -396px +} + +.sbsprite-easter_egg_9 { + background-position: -924px -396px +} + +.sbsprite-easter_egg_8 { + background-position: -946px -396px +} + +.sbsprite-easter_egg_7 { + background-position: -968px -396px +} + +.sbsprite-medium_gemstone_sack { + background-position: -990px -396px +} + +.sbsprite-large_enchanted_agronomy_sack { + background-position: -1012px -396px +} + +.sbsprite-blessed_fruit { + background-position: -1034px -396px +} + +.sbsprite-dungeon_stone_archer { + background-position: 0 -418px +} + +.sbsprite-arrow_swapper { + background-position: -22px -418px +} + +.sbsprite-snow_cannon { + background-position: -44px -418px +} + +.sbsprite-jerry_box_mega { + background-position: -66px -418px +} + +.sbsprite-pet_skin_sheep_brown { + background-position: -88px -418px +} + +.sbsprite-brewing_plus { + background-position: -110px -418px +} + +.sbsprite-mayor_barry { + background-position: -132px -418px +} + +.sbsprite-bat_ring { + background-position: -154px -418px +} + +.sbsprite-candle_arch { + background-position: -176px -418px +} + +.sbsprite-mithril_plate { + background-position: -198px -418px +} + +.sbsprite-carrot_bait { + background-position: -220px -418px +} + +.sbsprite-speed_artifact { + background-position: -242px -418px +} + +.sbsprite-salmon_hat { + background-position: -264px -418px +} + +.sbsprite-mini_sandcastle { + background-position: -286px -418px +} + +.sbsprite-scavenger_talisman { + background-position: -308px -418px +} + +.sbsprite-fast_travel_kuudra { + background-position: -330px -418px +} + +.sbsprite-foraging_fortune { + background-position: -352px -418px +} + +.sbsprite-bunny_personality { + background-position: -374px -418px +} + +.sbsprite-sandcastle_personality { + background-position: -396px -418px +} + +.sbsprite-undead_11 { + background-position: -418px -418px +} + +.sbsprite-magenta_jumbo_backpack { + background-position: -440px -418px +} + +.sbsprite-undead_10 { + background-position: -462px -418px +} + +.sbsprite-diamond_necron_head { + background-position: -484px -418px +} + +.sbsprite-wet_pumpkin { + background-position: -506px -418px +} + +.sbsprite-gemstone_gauntlet { + background-position: -528px -418px +} + +.sbsprite-cobblestone_generator_9 { + background-position: -550px -418px +} + +.sbsprite-cobblestone_generator_8 { + background-position: -572px -418px +} + +.sbsprite-iron_generator_1 { + background-position: -594px -418px +} + +.sbsprite-cobblestone_generator_7 { + background-position: -616px -418px +} + +.sbsprite-control_switch { + background-position: -638px -418px +} + +.sbsprite-iron_generator_2 { + background-position: -660px -418px +} + +.sbsprite-cobblestone_generator_6 { + background-position: -682px -418px +} + +.sbsprite-pumpkin_bomb { + background-position: -704px -418px +} + +.sbsprite-cobblestone_generator_5 { + background-position: -726px -418px +} + +.sbsprite-cobblestone_generator_4 { + background-position: -748px -418px +} + +.sbsprite-dwarven_tankard { + background-position: -770px -418px +} + +.sbsprite-jerry_talisman_purple { + background-position: -792px -418px +} + +.sbsprite-cobblestone_generator_3 { + background-position: -814px -418px +} + +.sbsprite-cobblestone_generator_2 { + background-position: -836px -418px +} + +.sbsprite-reindeer_plush { + background-position: -858px -418px +} + +.sbsprite-cobblestone_generator_1 { + background-position: -880px -418px +} + +.sbsprite-big_xtree { + background-position: -902px -418px +} + +.sbsprite-farming_island { + background-position: -924px -418px +} + +.sbsprite-rune_endersnake { + background-position: -946px -418px +} + +.sbsprite-rune { + background-position: -968px -418px +} + +.sbsprite-sweet_flesh { + background-position: -990px -418px +} + +.sbsprite-shark_10 { + background-position: -1012px -418px +} + +.sbsprite-shark_12 { + background-position: -1034px -418px +} + +.sbsprite-viking_tear { + background-position: 0 -440px +} + +.sbsprite-shark_11 { + background-position: -22px -440px +} + +.sbsprite-iron_generator_7 { + background-position: -44px -440px +} + +.sbsprite-iron_generator_8 { + background-position: -66px -440px +} + +.sbsprite-iron_generator_9 { + background-position: -88px -440px +} + +.sbsprite-beacon_skull { + background-position: -110px -440px +} + +.sbsprite-coin_gold_2 { + background-position: -132px -440px +} + +.sbsprite-iron_generator_3 { + background-position: -154px -440px +} + +.sbsprite-iron_generator_4 { + background-position: -176px -440px +} + +.sbsprite-sea_creature_ring { + background-position: -198px -440px +} + +.sbsprite-iron_generator_5 { + background-position: -220px -440px +} + +.sbsprite-iron_generator_6 { + background-position: -242px -440px +} + +.sbsprite-nether_warts_generator_7 { + background-position: -264px -440px +} + +.sbsprite-nether_warts_generator_8 { + background-position: -286px -440px +} + +.sbsprite-nether_warts_generator_9 { + background-position: -308px -440px +} + +.sbsprite-nether_warts_generator_3 { + background-position: -330px -440px +} + +.sbsprite-wolf_fur_mixin { + background-position: -352px -440px +} + +.sbsprite-mayor_marina { + background-position: -374px -440px +} + +.sbsprite-candy_ring { + background-position: -396px -440px +} + +.sbsprite-nether_warts_generator_4 { + background-position: -418px -440px +} + +.sbsprite-nether_warts_generator_5 { + background-position: -440px -440px +} + +.sbsprite-nether_warts_generator_6 { + background-position: -462px -440px +} + +.sbsprite-large_backpack { + background-position: -484px -440px +} + +.sbsprite-fine_sapphire_gem { + background-position: -506px -440px +} + +.sbsprite-nether_warts_generator_1 { + background-position: -528px -440px +} + +.sbsprite-nether_warts_generator_2 { + background-position: -550px -440px +} + +.sbsprite-griffin_upgrade_stone_uncommon { + background-position: -572px -440px +} + +.sbsprite-grey_greater_backpack { + background-position: -594px -440px +} + +.sbsprite-shiny_orb { + background-position: -616px -440px +} + +.sbsprite-large_enchanted_husbandry_sack { + background-position: -638px -440px +} + +.sbsprite-milk_cookies { + background-position: -660px -440px +} + +.sbsprite-spider_artifact { + background-position: -682px -440px +} + +.sbsprite-green_gift { + background-position: -704px -440px +} + +.sbsprite-fast_travel_park { + background-position: -726px -440px +} + +.sbsprite-jungle_heart { + background-position: -748px -440px +} + +.sbsprite-toil_log { + background-position: -770px -440px +} + +.sbsprite-absolute_ender_pearl { + background-position: -792px -440px +} + +.sbsprite-catacombs_pass_10 { + background-position: -814px -440px +} + +.sbsprite-protector_fragment { + background-position: -836px -440px +} + +.sbsprite-ice_generator_1 { + background-position: -858px -440px +} + +.sbsprite-ice_generator_2 { + background-position: -880px -440px +} + +.sbsprite-old_fragment { + background-position: -902px -440px +} + +.sbsprite-ice_generator_3 { + background-position: -924px -440px +} + +.sbsprite-traveling_zoo { + background-position: -946px -440px +} + +.sbsprite-ice_generator_4 { + background-position: -968px -440px +} + +.sbsprite-ice_generator_5 { + background-position: -990px -440px +} + +.sbsprite-ice_generator_6 { + background-position: -1012px -440px +} + +.sbsprite-ice_generator_7 { + background-position: -1034px -440px +} + +.sbsprite-ice_generator_8 { + background-position: 0 -462px +} + +.sbsprite-ice_generator_9 { + background-position: -22px -462px +} + +.sbsprite-lady_bug_personality { + background-position: -44px -462px +} + +.sbsprite-pet_skin_rock_laugh { + background-position: -66px -462px +} + +.sbsprite-experimentation_table { + background-position: -88px -462px +} + +.sbsprite-titanium_ore { + background-position: -110px -462px +} + +.sbsprite-blue_medium_backpack { + background-position: -132px -462px +} + +.sbsprite-ice_sofa { + background-position: -154px -462px +} + +.sbsprite-rune_lightning { + background-position: -176px -462px +} + +.sbsprite-tarantula_talisman { + background-position: -198px -462px +} + +.sbsprite-mayor_aatrox { + background-position: -220px -462px +} + +.sbsprite-race_crystal_core { + background-position: -242px -462px +} + +.sbsprite-black_cat_plush { + background-position: -264px -462px +} + +.sbsprite-small_agronomy_sack { + background-position: -286px -462px +} + +.sbsprite-magenta_greater_backpack { + background-position: -308px -462px +} + +.sbsprite-pet_skin_sheep_light_gray { + background-position: -330px -462px +} + +.sbsprite-diamond_scarf_head { + background-position: -352px -462px +} + +.sbsprite-hay_bed { + background-position: -374px -462px +} + +.sbsprite-talisman_enrichment_sea_creature_chance { + background-position: -396px -462px +} + +.sbsprite-strong_shimmer { + background-position: -418px -462px +} + +.sbsprite-shady_ring { + background-position: -440px -462px +} + +.sbsprite-dante_talisman { + background-position: -462px -462px +} + +.sbsprite-pink_bunny_1 { + background-position: -484px -462px +} + +.sbsprite-black_greater_backpack { + background-position: -506px -462px +} + +.sbsprite-builder_cactus { + background-position: -528px -462px +} + +.sbsprite-magenta_small_backpack { + background-position: -550px -462px +} + +.sbsprite-talisman_enrichment_defense { + background-position: -572px -462px +} + +.sbsprite-pink_bunny_3 { + background-position: -594px -462px +} + +.sbsprite-talisman_enrichment_magic_find { + background-position: -616px -462px +} + +.sbsprite-pink_bunny_2 { + background-position: -638px -462px +} + +.sbsprite-pink_bunny_5 { + background-position: -660px -462px +} + +.sbsprite-pink_bunny_4 { + background-position: -682px -462px +} + +.sbsprite-salmon_opal { + background-position: -704px -462px +} + +.sbsprite-pink_bunny_7 { + background-position: -726px -462px +} + +.sbsprite-pink_bunny_6 { + background-position: -748px -462px +} + +.sbsprite-pink_bunny_9 { + background-position: -770px -462px +} + +.sbsprite-pink_bunny_8 { + background-position: -792px -462px +} + +.sbsprite-refined_mithril { + background-position: -814px -462px +} + +.sbsprite-happy_emoji_10 { + background-position: -836px -462px +} + +.sbsprite-happy_emoji_11 { + background-position: -858px -462px +} + +.sbsprite-mine_talisman { + background-position: -880px -462px +} + +.sbsprite-old_dragon_helmet { + background-position: -902px -462px +} + +.sbsprite-boss_collection_livid { + background-position: -924px -462px +} + +.sbsprite-green_small_backpack { + background-position: -946px -462px +} + +.sbsprite-rune_bite { + background-position: -968px -462px +} + +.sbsprite-jungle_generator_11 { + background-position: -990px -462px +} + +.sbsprite-mega_luck { + background-position: -1012px -462px +} + +.sbsprite-jungle_generator_10 { + background-position: -1034px -462px +} + +.sbsprite-pet_skin_chicken_baby_chick { + background-position: 0 -484px +} + +.sbsprite-pile_of_cash { + background-position: -22px -484px +} + +.sbsprite-dungeoneering { + background-position: -44px -484px +} + +.sbsprite-base_griffin_upgrade_stone { + background-position: -66px -484px +} + +.sbsprite-red_tent { + background-position: -88px -484px +} + +.sbsprite-dungeon_red_support_orb { + background-position: -110px -484px +} + +.sbsprite-fast_travel_nether { + background-position: -132px -484px +} + +.sbsprite-night_vision_charm { + background-position: -154px -484px +} + +.sbsprite-zombie_grave { + background-position: -176px -484px +} + +.sbsprite-fish_bait { + background-position: -198px -484px +} + +.sbsprite-ice_lolly_personality { + background-position: -220px -484px +} + +.sbsprite-grizzly_paw { + background-position: -242px -484px +} + +.sbsprite-large_potion_bag { + background-position: -264px -484px +} + +.sbsprite-poorly_wrapped_rock { + background-position: -286px -484px +} + +.sbsprite-drill_engine { + background-position: -308px -484px +} + +.sbsprite-dark_oak_generator_10 { + background-position: -330px -484px +} + +.sbsprite-dungeon_normal_key { + background-position: -352px -484px +} + +.sbsprite-dark_oak_generator_11 { + background-position: -374px -484px +} + +.sbsprite-unstable_shimmer { + background-position: -396px -484px +} + +.sbsprite-green_egg { + background-position: -418px -484px +} + +.sbsprite-rough_topaz_gem { + background-position: -440px -484px +} + +.sbsprite-mana_flux_power_orb { + background-position: -462px -484px +} + +.sbsprite-amber_material { + background-position: -484px -484px +} + +.sbsprite-grinch_personality { + background-position: -506px -484px +} + +.sbsprite-fast_travel_crystals { + background-position: -528px -484px +} + +.sbsprite-lapis_generator_2 { + background-position: -550px -484px +} + +.sbsprite-lapis_generator_3 { + background-position: -572px -484px +} + +.sbsprite-rune_sack { + background-position: -594px -484px +} + +.sbsprite-lapis_generator_4 { + background-position: -616px -484px +} + +.sbsprite-tightly_tied_hay_bale { + background-position: -638px -484px +} + +.sbsprite-beach_ball { + background-position: -660px -484px +} + +.sbsprite-lapis_generator_5 { + background-position: -682px -484px +} + +.sbsprite-lapis_generator_10 { + background-position: -704px -484px +} + +.sbsprite-lapis_generator_12 { + background-position: -726px -484px +} + +.sbsprite-light_grey_large_backpack { + background-position: -748px -484px +} + +.sbsprite-lapis_generator_1 { + background-position: -770px -484px +} + +.sbsprite-lapis_generator_11 { + background-position: -792px -484px +} + +.sbsprite-pet_item_quick_claw { + background-position: -814px -484px +} + +.sbsprite-basketball_9 { + background-position: -836px -484px +} + +.sbsprite-deck_chair { + background-position: -858px -484px +} + +.sbsprite-lady_bug_9 { + background-position: -880px -484px +} + +.sbsprite-basketball_8 { + background-position: -902px -484px +} + +.sbsprite-lady_bug_8 { + background-position: -924px -484px +} + +.sbsprite-basketball_7 { + background-position: -946px -484px +} + +.sbsprite-basketball_6 { + background-position: -968px -484px +} + +.sbsprite-rune_pestilence { + background-position: -990px -484px +} + +.sbsprite-basketball_5 { + background-position: -1012px -484px +} + +.sbsprite-mithril_generator_12 { + background-position: -1034px -484px +} + +.sbsprite-sea_creature_talisman { + background-position: 0 -506px +} + +.sbsprite-basketball_4 { + background-position: -22px -506px +} + +.sbsprite-mithril_generator_11 { + background-position: -44px -506px +} + +.sbsprite-basketball_3 { + background-position: -66px -506px +} + +.sbsprite-mithril_generator_10 { + background-position: -88px -506px +} + +.sbsprite-basketball_2 { + background-position: -110px -506px +} + +.sbsprite-blue_egg { + background-position: -132px -506px +} + +.sbsprite-basketball_1 { + background-position: -154px -506px +} + +.sbsprite-lady_bug_1 { + background-position: -176px -506px +} + +.sbsprite-emerald_ring { + background-position: -198px -506px +} + +.sbsprite-lady_bug_3 { + background-position: -220px -506px +} + +.sbsprite-lady_bug_2 { + background-position: -242px -506px +} + +.sbsprite-lady_bug_5 { + background-position: -264px -506px +} + +.sbsprite-lapis_generator_6 { + background-position: -286px -506px +} + +.sbsprite-epoch_cake_green { + background-position: -308px -506px +} + +.sbsprite-lady_bug_4 { + background-position: -330px -506px +} + +.sbsprite-lapis_generator_7 { + background-position: -352px -506px +} + +.sbsprite-medium_husbandry_sack { + background-position: -374px -506px +} + +.sbsprite-bunny_11 { + background-position: -396px -506px +} + +.sbsprite-lady_bug_7 { + background-position: -418px -506px +} + +.sbsprite-lapis_generator_8 { + background-position: -440px -506px +} + +.sbsprite-bunny_10 { + background-position: -462px -506px +} + +.sbsprite-candy_relic { + background-position: -484px -506px +} + +.sbsprite-lady_bug_6 { + background-position: -506px -506px +} + +.sbsprite-lapis_generator_9 { + background-position: -528px -506px +} + +.sbsprite-red_jumbo_backpack { + background-position: -550px -506px +} + +.sbsprite-holy_fragment { + background-position: -572px -506px +} + +.sbsprite-ice_cream_personality { + background-position: -594px -506px +} + +.sbsprite-dungeon_blue_support_orb { + background-position: -616px -506px +} + +.sbsprite-blaze_generator_4 { + background-position: -638px -506px +} + +.sbsprite-blaze_generator_3 { + background-position: -660px -506px +} + +.sbsprite-blaze_generator_2 { + background-position: -682px -506px +} + +.sbsprite-blaze_generator_1 { + background-position: -704px -506px +} + +.sbsprite-blaze_generator_8 { + background-position: -726px -506px +} + +.sbsprite-blaze_generator_7 { + background-position: -748px -506px +} + +.sbsprite-pet_skin_whale_orca { + background-position: -770px -506px +} + +.sbsprite-blaze_generator_6 { + background-position: -792px -506px +} + +.sbsprite-blaze_generator_5 { + background-position: -814px -506px +} + +.sbsprite-deadgehog_helmet { + background-position: -836px -506px +} + +.sbsprite-volta { + background-position: -858px -506px +} + +.sbsprite-blaze_generator_9 { + background-position: -880px -506px +} + +.sbsprite-frozen_chicken { + background-position: -902px -506px +} + +.sbsprite-pet_skin_dragon_neon_purple { + background-position: -924px -506px +} + +.sbsprite-cavespider_generator_6 { + background-position: -946px -506px +} + +.sbsprite-cavespider_generator_5 { + background-position: -968px -506px +} + +.sbsprite-rune_gem { + background-position: -990px -506px +} + +.sbsprite-cavespider_generator_8 { + background-position: -1012px -506px +} + +.sbsprite-cavespider_generator_7 { + background-position: -1034px -506px +} + +.sbsprite-cavespider_generator_2 { + background-position: 0 -528px +} + +.sbsprite-cavespider_generator_1 { + background-position: -22px -528px +} + +.sbsprite-cavespider_generator_4 { + background-position: -44px -528px +} + +.sbsprite-jerry_talisman_blue { + background-position: -66px -528px +} + +.sbsprite-cavespider_generator_3 { + background-position: -88px -528px +} + +.sbsprite-speed_talisman { + background-position: -110px -528px +} + +.sbsprite-mummy_1 { + background-position: -132px -528px +} + +.sbsprite-rabbit_hat { + background-position: -154px -528px +} + +.sbsprite-bat_person_ring { + background-position: -176px -528px +} + +.sbsprite-mummy_3 { + background-position: -198px -528px +} + +.sbsprite-cavespider_generator_9 { + background-position: -220px -528px +} + +.sbsprite-mummy_2 { + background-position: -242px -528px +} + +.sbsprite-mummy_5 { + background-position: -264px -528px +} + +.sbsprite-strong_baby { + background-position: -286px -528px +} + +.sbsprite-mummy_4 { + background-position: -308px -528px +} + +.sbsprite-mummy_7 { + background-position: -330px -528px +} + +.sbsprite-mummy_6 { + background-position: -352px -528px +} + +.sbsprite-spooky_helmet { + background-position: -374px -528px +} + +.sbsprite-dining_chair { + background-position: -396px -528px +} + +.sbsprite-mummy_9 { + background-position: -418px -528px +} + +.sbsprite-mummy_8 { + background-position: -440px -528px +} + +.sbsprite-ender_relic { + background-position: -462px -528px +} + +.sbsprite-flawed_jasper_gem { + background-position: -484px -528px +} + +.sbsprite-cactus_generator_10 { + background-position: -506px -528px +} + +.sbsprite-pet_skin_silverfish_fossilized { + background-position: -528px -528px +} + +.sbsprite-cactus_generator_11 { + background-position: -550px -528px +} + +.sbsprite-cactus_generator_12 { + background-position: -572px -528px +} + +.sbsprite-dark_goggles { + background-position: -594px -528px +} + +.sbsprite-starred_bonzo_mask { + background-position: -616px -528px +} + +.sbsprite-pigs_foot { + background-position: -638px -528px +} + +.sbsprite-gemstone_mixture { + background-position: -660px -528px +} + +.sbsprite-tarantula_black_widow { + background-position: -682px -528px +} + +.sbsprite-builder_berry_bush { + background-position: -704px -528px +} + +.sbsprite-chicken_head { + background-position: -726px -528px +} + +.sbsprite-pet_skin_elephant_purple { + background-position: -748px -528px +} + +.sbsprite-cow_head { + background-position: -770px -528px +} + +.sbsprite-witch_broomstick { + background-position: -792px -528px +} + +.sbsprite-pet_skin_monkey_gorilla { + background-position: -814px -528px +} + +.sbsprite-grey_large_backpack { + background-position: -836px -528px +} + +.sbsprite-pet_skin_sheep_neon_green { + background-position: -858px -528px +} + +.sbsprite-magic_mushroom_soup { + background-position: -880px -528px +} + +.sbsprite-petrified_starfall { + background-position: -902px -528px +} + +.sbsprite-spruce_generator_9 { + background-position: -924px -528px +} + +.sbsprite-second_master_star { + background-position: -946px -528px +} + +.sbsprite-sled { + background-position: -968px -528px +} + +.sbsprite-spruce_generator_1 { + background-position: -990px -528px +} + +.sbsprite-voidling_generator_2 { + background-position: -1012px -528px +} + +.sbsprite-red { + background-position: -1034px -528px +} + +.sbsprite-spirit_wing { + background-position: 0 -550px +} + +.sbsprite-spruce_generator_2 { + background-position: -22px -550px +} + +.sbsprite-voidling_generator_1 { + background-position: -44px -550px +} + +.sbsprite-spruce_generator_3 { + background-position: -66px -550px +} + +.sbsprite-voidling_generator_4 { + background-position: -88px -550px +} + +.sbsprite-spruce_generator_4 { + background-position: -110px -550px +} + +.sbsprite-voidling_generator_3 { + background-position: -132px -550px +} + +.sbsprite-spruce_generator_5 { + background-position: -154px -550px +} + +.sbsprite-voidling_generator_6 { + background-position: -176px -550px +} + +.sbsprite-spruce_generator_6 { + background-position: -198px -550px +} + +.sbsprite-voidling_generator_5 { + background-position: -220px -550px +} + +.sbsprite-spruce_generator_7 { + background-position: -242px -550px +} + +.sbsprite-voidling_generator_8 { + background-position: -264px -550px +} + +.sbsprite-spruce_generator_8 { + background-position: -286px -550px +} + +.sbsprite-voidling_generator_7 { + background-position: -308px -550px +} + +.sbsprite-voidling_generator_9 { + background-position: -330px -550px +} + +.sbsprite-magenta_large_backpack { + background-position: -352px -550px +} + +.sbsprite-fast_travel_end { + background-position: -374px -550px +} + +.sbsprite-cow_generator_8 { + background-position: -396px -550px +} + +.sbsprite-cow_generator_9 { + background-position: -418px -550px +} + +.sbsprite-present_1 { + background-position: -440px -550px +} + +.sbsprite-topaz_crystal { + background-position: -462px -550px +} + +.sbsprite-bestiary_private_island { + background-position: -484px -550px +} + +.sbsprite-present_2 { + background-position: -506px -550px +} + +.sbsprite-present_3 { + background-position: -528px -550px +} + +.sbsprite-cow_generator_1 { + background-position: -550px -550px +} + +.sbsprite-cow_generator_2 { + background-position: -572px -550px +} + +.sbsprite-dragon_horn { + background-position: -594px -550px +} + +.sbsprite-bat_artifact { + background-position: -616px -550px +} + +.sbsprite-cow_generator_3 { + background-position: -638px -550px +} + +.sbsprite-cow_generator_4 { + background-position: -660px -550px +} + +.sbsprite-cow_generator_5 { + background-position: -682px -550px +} + +.sbsprite-cow_generator_6 { + background-position: -704px -550px +} + +.sbsprite-cow_generator_7 { + background-position: -726px -550px +} + +.sbsprite-goblin_omelette_pesto { + background-position: -748px -550px +} + +.sbsprite-farming_2_portal { + background-position: -770px -550px +} + +.sbsprite-village_talisman { + background-position: -792px -550px +} + +.sbsprite-cheetah_talisman { + background-position: -814px -550px +} + +.sbsprite-mining_2_portal { + background-position: -836px -550px +} + +.sbsprite-present_8 { + background-position: -858px -550px +} + +.sbsprite-wood_talisman { + background-position: -880px -550px +} + +.sbsprite-present_9 { + background-position: -902px -550px +} + +.sbsprite-present_4 { + background-position: -924px -550px +} + +.sbsprite-present_5 { + background-position: -946px -550px +} + +.sbsprite-present_6 { + background-position: -968px -550px +} + +.sbsprite-present_7 { + background-position: -990px -550px +} + +.sbsprite-healing_ring { + background-position: -1012px -550px +} + +.sbsprite-titanium_artifact { + background-position: -1034px -550px +} + +.sbsprite-penguin_1 { + background-position: 0 -572px +} + +.sbsprite-penguin_2 { + background-position: -22px -572px +} + +.sbsprite-ruby_crystal { + background-position: -44px -572px +} + +.sbsprite-tiki_torch { + background-position: -66px -572px +} + +.sbsprite-wheat_generator_10 { + background-position: -88px -572px +} + +.sbsprite-emerald_generator_8 { + background-position: -110px -572px +} + +.sbsprite-wheat_generator_12 { + background-position: -132px -572px +} + +.sbsprite-emerald_generator_7 { + background-position: -154px -572px +} + +.sbsprite-wheat_generator_11 { + background-position: -176px -572px +} + +.sbsprite-scarecrow { + background-position: -198px -572px +} + +.sbsprite-emerald_generator_9 { + background-position: -220px -572px +} + +.sbsprite-emerald_generator_4 { + background-position: -242px -572px +} + +.sbsprite-emerald_generator_3 { + background-position: -264px -572px +} + +.sbsprite-emerald_generator_6 { + background-position: -286px -572px +} + +.sbsprite-emerald_generator_5 { + background-position: -308px -572px +} + +.sbsprite-pet_skin_elephant_monochrome { + background-position: -330px -572px +} + +.sbsprite-emerald_generator_2 { + background-position: -352px -572px +} + +.sbsprite-emerald_generator_1 { + background-position: -374px -572px +} + +.sbsprite-flawless_topaz_gem { + background-position: -396px -572px +} + +.sbsprite-raw_soulflow { + background-position: -418px -572px +} + +.sbsprite-large_enchanted_mining_sack { + background-position: -440px -572px +} + +.sbsprite-gold_scarf_head { + background-position: -462px -572px +} + +.sbsprite-orange_medium_backpack { + background-position: -484px -572px +} + +.sbsprite-fine_jade_gem { + background-position: -506px -572px +} + +.sbsprite-white_gift { + background-position: -528px -572px +} + +.sbsprite-goblin_omelette_sunny_side { + background-position: -550px -572px +} + +.sbsprite-builder_brown_mushroom { + background-position: -572px -572px +} + +.sbsprite-giant_flesh { + background-position: -594px -572px +} + +.sbsprite-jumbo_backpack { + background-position: -616px -572px +} + +.sbsprite-eternal_flame_ring { + background-position: -638px -572px +} + +.sbsprite-wrapped_gift_for_juliette { + background-position: -660px -572px +} + +.sbsprite-enchanted_book_bundle_counter_strike { + background-position: -682px -572px +} + +.sbsprite-pet_item_toy_jerry { + background-position: -704px -572px +} + +.sbsprite-golden_plate { + background-position: -726px -572px +} + +.sbsprite-penguin_5 { + background-position: -748px -572px +} + +.sbsprite-grandfather_clock { + background-position: -770px -572px +} + +.sbsprite-penguin_6 { + background-position: -792px -572px +} + +.sbsprite-penguin_3 { + background-position: -814px -572px +} + +.sbsprite-pet_skin_elephant_orange { + background-position: -836px -572px +} + +.sbsprite-fast_travel_museum { + background-position: -858px -572px +} + +.sbsprite-penguin_4 { + background-position: -880px -572px +} + +.sbsprite-penguin_9 { + background-position: -902px -572px +} + +.sbsprite-penguin_7 { + background-position: -924px -572px +} + +.sbsprite-penguin_8 { + background-position: -946px -572px +} + +.sbsprite-light_grey_medium_backpack { + background-position: -968px -572px +} + +.sbsprite-blue_jumbo_backpack { + background-position: -990px -572px +} + +.sbsprite-cyan_small_backpack { + background-position: -1012px -572px +} + +.sbsprite-jade_crystal { + background-position: -1034px -572px +} + +.sbsprite-large_dungeon_sack { + background-position: 0 -594px +} + +.sbsprite-summoning_ring { + background-position: -22px -594px +} + +.sbsprite-dragon_essence { + background-position: -44px -594px +} + +.sbsprite-basket_of_seeds { + background-position: -66px -594px +} + +.sbsprite-bunny_jerry { + background-position: -88px -594px +} + +.sbsprite-perfect_jade_gem { + background-position: -110px -594px +} + +.sbsprite-spray_can { + background-position: -132px -594px +} + +.sbsprite-campfire_talisman_4 { + background-position: -154px -594px +} + +.sbsprite-campfire_talisman_5 { + background-position: -176px -594px +} + +.sbsprite-campfire_talisman_2 { + background-position: -198px -594px +} + +.sbsprite-campfire_talisman_3 { + background-position: -220px -594px +} + +.sbsprite-remnant_of_the_eye { + background-position: -242px -594px +} + +.sbsprite-campfire_talisman_1 { + background-position: -264px -594px +} + +.sbsprite-talisman_enrichment_critical_chance { + background-position: -286px -594px +} + +.sbsprite-ghast_head { + background-position: -308px -594px +} + +.sbsprite-white_greater_backpack { + background-position: -330px -594px +} + +.sbsprite-mayor_diaz { + background-position: -352px -594px +} + +.sbsprite-campfire_talisman_8 { + background-position: -374px -594px +} + +.sbsprite-campfire_talisman_9 { + background-position: -396px -594px +} + +.sbsprite-jaderald { + background-position: -418px -594px +} + +.sbsprite-campfire_talisman_6 { + background-position: -440px -594px +} + +.sbsprite-gold_thorn_head { + background-position: -462px -594px +} + +.sbsprite-campfire_talisman_7 { + background-position: -484px -594px +} + +.sbsprite-dark_bait { + background-position: -506px -594px +} + +.sbsprite-game_annihilator { + background-position: -528px -594px +} + +.sbsprite-purple_greater_backpack { + background-position: -550px -594px +} + +.sbsprite-bestiary_deep_caverns { + background-position: -572px -594px +} + +.sbsprite-foraging_5_portal { + background-position: -594px -594px +} + +.sbsprite-wolf_talisman { + background-position: -616px -594px +} + +.sbsprite-gold_professor_head { + background-position: -638px -594px +} + +.sbsprite-pet_skin_sheep_light_blue { + background-position: -660px -594px +} + +.sbsprite-ice_lolly_4 { + background-position: -682px -594px +} + +.sbsprite-basketball_10 { + background-position: -704px -594px +} + +.sbsprite-ice_lolly_3 { + background-position: -726px -594px +} + +.sbsprite-mineral_helmet { + background-position: -748px -594px +} + +.sbsprite-basketball_11 { + background-position: -770px -594px +} + +.sbsprite-ice_lolly_2 { + background-position: -792px -594px +} + +.sbsprite-basketball_12 { + background-position: -814px -594px +} + +.sbsprite-ice_lolly_1 { + background-position: -836px -594px +} + +.sbsprite-rock_candy { + background-position: -858px -594px +} + +.sbsprite-ice_lolly_8 { + background-position: -880px -594px +} + +.sbsprite-tarantula_generator_2 { + background-position: -902px -594px +} + +.sbsprite-ice_lolly_7 { + background-position: -924px -594px +} + +.sbsprite-tarantula_generator_1 { + background-position: -946px -594px +} + +.sbsprite-ice_lolly_6 { + background-position: -968px -594px +} + +.sbsprite-ice_lolly_5 { + background-position: -990px -594px +} + +.sbsprite-purple_egg { + background-position: -1012px -594px +} + +.sbsprite-ice_lolly_9 { + background-position: -1034px -594px +} + +.sbsprite-tarantula_generator_9 { + background-position: 0 -616px +} + +.sbsprite-tarantula_generator_8 { + background-position: -22px -616px +} + +.sbsprite-tarantula_generator_7 { + background-position: -44px -616px +} + +.sbsprite-tarantula_generator_6 { + background-position: -66px -616px +} + +.sbsprite-tarantula_generator_5 { + background-position: -88px -616px +} + +.sbsprite-tarantula_generator_4 { + background-position: -110px -616px +} + +.sbsprite-tarantula_generator_3 { + background-position: -132px -616px +} + +.sbsprite-hypixel_castle { + background-position: -154px -616px +} + +.sbsprite-rune_golden { + background-position: -176px -616px +} + +.sbsprite-wheat_generator_9 { + background-position: -198px -616px +} + +.sbsprite-ftx_3070 { + background-position: -220px -616px +} + +.sbsprite-wheat_generator_8 { + background-position: -242px -616px +} + +.sbsprite-wheat_generator_5 { + background-position: -264px -616px +} + +.sbsprite-wheat_generator_4 { + background-position: -286px -616px +} + +.sbsprite-builder_corn { + background-position: -308px -616px +} + +.sbsprite-cheap_coffee { + background-position: -330px -616px +} + +.sbsprite-wheat_generator_7 { + background-position: -352px -616px +} + +.sbsprite-wheat_generator_6 { + background-position: -374px -616px +} + +.sbsprite-mushroom_generator_11 { + background-position: -396px -616px +} + +.sbsprite-wheat_generator_1 { + background-position: -418px -616px +} + +.sbsprite-mushroom_generator_10 { + background-position: -440px -616px +} + +.sbsprite-ender_plus { + background-position: -462px -616px +} + +.sbsprite-wheat_generator_3 { + background-position: -484px -616px +} + +.sbsprite-wheat_generator_2 { + background-position: -506px -616px +} + +.sbsprite-voidling_generator_10 { + background-position: -528px -616px +} + +.sbsprite-voidling_generator_11 { + background-position: -550px -616px +} + +.sbsprite-mushroom_generator_12 { + background-position: -572px -616px +} + +.sbsprite-personal_bonus { + background-position: -594px -616px +} + +.sbsprite-flawless_amber_gem { + background-position: -616px -616px +} + +.sbsprite-rune_darkness_within { + background-position: -638px -616px +} + +.sbsprite-bag_of_cash { + background-position: -660px -616px +} + +.sbsprite-pet_skin_hound_beagle { + background-position: -682px -616px +} + +.sbsprite-pufferfish_hat { + background-position: -704px -616px +} + +.sbsprite-lime_greater_backpack { + background-position: -726px -616px +} + +.sbsprite-food_trough { + background-position: -748px -616px +} + +.sbsprite-pet_skin_yeti_grown_up { + background-position: -770px -616px +} + +.sbsprite-slime_generator_10 { + background-position: -792px -616px +} + +.sbsprite-undead_personality { + background-position: -814px -616px +} + +.sbsprite-slime_generator_11 { + background-position: -836px -616px +} + +.sbsprite-nether_wart_island { + background-position: -858px -616px +} + +.sbsprite-gravel_generator_5 { + background-position: -880px -616px +} + +.sbsprite-gravel_generator_4 { + background-position: -902px -616px +} + +.sbsprite-gravel_generator_7 { + background-position: -924px -616px +} + +.sbsprite-gravel_generator_6 { + background-position: -946px -616px +} + +.sbsprite-gravel_generator_9 { + background-position: -968px -616px +} + +.sbsprite-gravel_generator_8 { + background-position: -990px -616px +} + +.sbsprite-shiny_shard { + background-position: -1012px -616px +} + +.sbsprite-pet_skin_rabbit_rose { + background-position: -1034px -616px +} + +.sbsprite-quiver { + background-position: 0 -638px +} + +.sbsprite-rune_snake { + background-position: -22px -638px +} + +.sbsprite-bonzo_mask { + background-position: -44px -638px +} + +.sbsprite-fast_travel { + background-position: -66px -638px +} + +.sbsprite-treasurite { + background-position: -88px -638px +} + +.sbsprite-chicken_coop { + background-position: -110px -638px +} + +.sbsprite-end_portal_fumes_mixin { + background-position: -132px -638px +} + +.sbsprite-crafting_plus { + background-position: -154px -638px +} + +.sbsprite-gravel_generator_1 { + background-position: -176px -638px +} + +.sbsprite-gravel_generator_3 { + background-position: -198px -638px +} + +.sbsprite-gravel_generator_2 { + background-position: -220px -638px +} + +.sbsprite-easter_egg_11 { + background-position: -242px -638px +} + +.sbsprite-easter_egg_10 { + background-position: -264px -638px +} + +.sbsprite-protein_bar { + background-position: -286px -638px +} + +.sbsprite-hard_stone_generator_10 { + background-position: -308px -638px +} + +.sbsprite-coin_gold { + background-position: -330px -638px +} + +.sbsprite-light_blue_jumbo_backpack { + background-position: -352px -638px +} + +.sbsprite-hard_stone_generator_12 { + background-position: -374px -638px +} + +.sbsprite-hard_stone_generator_11 { + background-position: -396px -638px +} + +.sbsprite-rune_blood { + background-position: -418px -638px +} + +.sbsprite-raggedy_shark_tooth_necklace { + background-position: -440px -638px +} + +.sbsprite-pure_mithril { + background-position: -462px -638px +} + +.sbsprite-coin_emerald { + background-position: -484px -638px +} + +.sbsprite-pet_skin_black_cat_onyx { + background-position: -506px -638px +} + +.sbsprite-easter_egg_12 { + background-position: -528px -638px +} + +.sbsprite-emperor_head { + background-position: -550px -638px +} + +.sbsprite-power_wither_helmet { + background-position: -572px -638px +} + +.sbsprite-bee_11 { + background-position: -594px -638px +} + +.sbsprite-bee_10 { + background-position: -616px -638px +} + +.sbsprite-pet_skin_wolf { + background-position: -638px -638px +} + +.sbsprite-pumpkin_4 { + background-position: -660px -638px +} + +.sbsprite-pumpkin_3 { + background-position: -682px -638px +} + +.sbsprite-pumpkin_6 { + background-position: -704px -638px +} + +.sbsprite-fine_ruby_gem { + background-position: -726px -638px +} + +.sbsprite-pumpkin_5 { + background-position: -748px -638px +} + +.sbsprite-pumpkin_2 { + background-position: -770px -638px +} + +.sbsprite-electron_transmitter { + background-position: -792px -638px +} + +.sbsprite-pumpkin_1 { + background-position: -814px -638px +} + +.sbsprite-gingerbread_house { + background-position: -836px -638px +} + +.sbsprite-bee_1 { + background-position: -858px -638px +} + +.sbsprite-large_mining_sack { + background-position: -880px -638px +} + +.sbsprite-bee_2 { + background-position: -902px -638px +} + +.sbsprite-bee_3 { + background-position: -924px -638px +} + +.sbsprite-bee_4 { + background-position: -946px -638px +} + +.sbsprite-midas_jewel { + background-position: -968px -638px +} + +.sbsprite-unstable_dragon_helmet { + background-position: -990px -638px +} + +.sbsprite-vaccine_talisman { + background-position: -1012px -638px +} + +.sbsprite-whale_bait { + background-position: -1034px -638px +} + +.sbsprite-bee_9 { + background-position: 0 -660px +} + +.sbsprite-bee_5 { + background-position: -22px -660px +} + +.sbsprite-booster_cookie_box { + background-position: -44px -660px +} + +.sbsprite-perfect_topaz_gem { + background-position: -66px -660px +} + +.sbsprite-bee_6 { + background-position: -88px -660px +} + +.sbsprite-bee_7 { + background-position: -110px -660px +} + +.sbsprite-bee_8 { + background-position: -132px -660px +} + +.sbsprite-elvish_helmet { + background-position: -154px -660px +} + +.sbsprite-pumpkin_8 { + background-position: -176px -660px +} + +.sbsprite-light_grey_greater_backpack { + background-position: -198px -660px +} + +.sbsprite-pumpkin_7 { + background-position: -220px -660px +} + +.sbsprite-pumpkin_9 { + background-position: -242px -660px +} + +.sbsprite-best_weapon_rack { + background-position: -264px -660px +} + +.sbsprite-washed_up_souvenir { + background-position: -286px -660px +} + +.sbsprite-coin_diamond { + background-position: -308px -660px +} + +.sbsprite-builder_pink_berry { + background-position: -330px -660px +} + +.sbsprite-clownfish_personality { + background-position: -352px -660px +} + +.sbsprite-easter_egg_personality { + background-position: -374px -660px +} + +.sbsprite-jerry_talisman_green { + background-position: -396px -660px +} + +.sbsprite-spiked_atrocity { + background-position: -418px -660px +} + +.sbsprite-flower_generator_8 { + background-position: -440px -660px +} + +.sbsprite-flower_generator_9 { + background-position: -462px -660px +} + +.sbsprite-farmer_orb { + background-position: -484px -660px +} + +.sbsprite-flower_generator_4 { + background-position: -506px -660px +} + +.sbsprite-crypt_skull_key { + background-position: -528px -660px +} + +.sbsprite-flower_generator_5 { + background-position: -550px -660px +} + +.sbsprite-flower_generator_6 { + background-position: -572px -660px +} + +.sbsprite-flower_generator_7 { + background-position: -594px -660px +} + +.sbsprite-flower_generator_1 { + background-position: -616px -660px +} + +.sbsprite-flower_generator_2 { + background-position: -638px -660px +} + +.sbsprite-nutcracker { + background-position: -660px -660px +} + +.sbsprite-flower_generator_3 { + background-position: -682px -660px +} + +.sbsprite-scarf_studies { + background-position: -704px -660px +} + +.sbsprite-builder_apple { + background-position: -726px -660px +} + +.sbsprite-skyblock_table { + background-position: -748px -660px +} + +.sbsprite-sleeping_eye { + background-position: -770px -660px +} + +.sbsprite-spider_generator_1 { + background-position: -792px -660px +} + +.sbsprite-pet_skin_elephant_blue { + background-position: -814px -660px +} + +.sbsprite-spider_generator_2 { + background-position: -836px -660px +} + +.sbsprite-spider_generator_3 { + background-position: -858px -660px +} + +.sbsprite-shark_bait { + background-position: -880px -660px +} + +.sbsprite-spider_generator_4 { + background-position: -902px -660px +} + +.sbsprite-spider_generator_5 { + background-position: -924px -660px +} + +.sbsprite-black { + background-position: -946px -660px +} + +.sbsprite-sapphire_polished_drill_engine { + background-position: -968px -660px +} + +.sbsprite-cocoa_generator_1 { + background-position: -990px -660px +} + +.sbsprite-cocoa_generator_7 { + background-position: -1012px -660px +} + +.sbsprite-cocoa_generator_6 { + background-position: -1034px -660px +} + +.sbsprite-rune_snow { + background-position: 0 -682px +} + +.sbsprite-cocoa_generator_9 { + background-position: -22px -682px +} + +.sbsprite-cocoa_generator_8 { + background-position: -44px -682px +} + +.sbsprite-cocoa_generator_3 { + background-position: -66px -682px +} + +.sbsprite-cocoa_generator_2 { + background-position: -88px -682px +} + +.sbsprite-cocoa_generator_5 { + background-position: -110px -682px +} + +.sbsprite-cocoa_generator_4 { + background-position: -132px -682px +} + +.sbsprite-spider_generator_6 { + background-position: -154px -682px +} + +.sbsprite-spider_generator_7 { + background-position: -176px -682px +} + +.sbsprite-spider_generator_8 { + background-position: -198px -682px +} + +.sbsprite-spider_generator_9 { + background-position: -220px -682px +} + +.sbsprite-brown_large_backpack { + background-position: -242px -682px +} + +.sbsprite-flower_maelstrom { + background-position: -264px -682px +} + +.sbsprite-pumpkin_generator_12 { + background-position: -286px -682px +} + +.sbsprite-coal_generator_9 { + background-position: -308px -682px +} + +.sbsprite-diamond_thorn_head { + background-position: -330px -682px +} + +.sbsprite-ender_stone_generator_11 { + background-position: -352px -682px +} + +.sbsprite-coal_generator_8 { + background-position: -374px -682px +} + +.sbsprite-ender_stone_generator_10 { + background-position: -396px -682px +} + +.sbsprite-coal_generator_7 { + background-position: -418px -682px +} + +.sbsprite-jerry_box_blue { + background-position: -440px -682px +} + +.sbsprite-coal_generator_6 { + background-position: -462px -682px +} + +.sbsprite-coal_generator_5 { + background-position: -484px -682px +} + +.sbsprite-pumpkin_generator_11 { + background-position: -506px -682px +} + +.sbsprite-coal_generator_4 { + background-position: -528px -682px +} + +.sbsprite-pumpkin_generator_10 { + background-position: -550px -682px +} + +.sbsprite-talisman_of_space { + background-position: -572px -682px +} + +.sbsprite-talisman_enrichment_strength { + background-position: -594px -682px +} + +.sbsprite-white_jumbo_backpack { + background-position: -616px -682px +} + +.sbsprite-full_fairy_control { + background-position: -638px -682px +} + +.sbsprite-quartz_generator_9 { + background-position: -660px -682px +} + +.sbsprite-rune_wake { + background-position: -682px -682px +} + +.sbsprite-quartz_generator_8 { + background-position: -704px -682px +} + +.sbsprite-festive_jerry_personality { + background-position: -726px -682px +} + +.sbsprite-quartz_generator_5 { + background-position: -748px -682px +} + +.sbsprite-builder_berry { + background-position: -770px -682px +} + +.sbsprite-quartz_generator_4 { + background-position: -792px -682px +} + +.sbsprite-quartz_generator_7 { + background-position: -814px -682px +} + +.sbsprite-quartz_generator_6 { + background-position: -836px -682px +} + +.sbsprite-quartz_generator_1 { + background-position: -858px -682px +} + +.sbsprite-quartz_generator_3 { + background-position: -880px -682px +} + +.sbsprite-quartz_generator_2 { + background-position: -902px -682px +} + +.sbsprite-bingo_heirloom { + background-position: -924px -682px +} + +.sbsprite-dwarf_turtle_shelmet { + background-position: -946px -682px +} + +.sbsprite-wolf_paw { + background-position: -968px -682px +} + +.sbsprite-jasper_crystal { + background-position: -990px -682px +} + +.sbsprite-party_hat_crab { + background-position: -1012px -682px +} + +.sbsprite-feather_artifact { + background-position: -1034px -682px +} + +.sbsprite-coal_generator_3 { + background-position: 0 -704px +} + +.sbsprite-coal_generator_2 { + background-position: -22px -704px +} + +.sbsprite-coal_generator_1 { + background-position: -44px -704px +} + +.sbsprite-fast_travel_gold { + background-position: -66px -704px +} + +.sbsprite-crystal_hollows_crystals { + background-position: -88px -704px +} + +.sbsprite-mining_island { + background-position: -110px -704px +} + +.sbsprite-flawless_jasper_gem { + background-position: -132px -704px +} + +.sbsprite-halloween_candles { + background-position: -154px -704px +} + +.sbsprite-ascension_rope { + background-position: -176px -704px +} + +.sbsprite-brown_small_backpack { + background-position: -198px -704px +} + +.sbsprite-diver_puffer { + background-position: -220px -704px +} + +.sbsprite-melon_generator_10 { + background-position: -242px -704px +} + +.sbsprite-melon_generator_12 { + background-position: -264px -704px +} + +.sbsprite-melon_generator_11 { + background-position: -286px -704px +} + +.sbsprite-desert_island { + background-position: -308px -704px +} + +.sbsprite-green { + background-position: -330px -704px +} + +.sbsprite-crystallized_heart { + background-position: -352px -704px +} + +.sbsprite-sinful_dice { + background-position: -374px -704px +} + +.sbsprite-soulflow_supercell { + background-position: -396px -704px +} + +.sbsprite-sea_creature_artifact { + background-position: -418px -704px +} + +.sbsprite-grey_small_backpack { + background-position: -440px -704px +} + +.sbsprite-aatrox_batphone { + background-position: -462px -704px +} + +.sbsprite-clay_generator_10 { + background-position: -484px -704px +} + +.sbsprite-clay_generator_11 { + background-position: -506px -704px +} + +.sbsprite-end_stone_personality { + background-position: -528px -704px +} + +.sbsprite-builder_banana_bunch { + background-position: -550px -704px +} + +.sbsprite-danger_2_portal { + background-position: -572px -704px +} + +.sbsprite-mayor_scorpius { + background-position: -594px -704px +} + +.sbsprite-voodoo { + background-position: -616px -704px +} + +.sbsprite-jerry_box_purple { + background-position: -638px -704px +} + +.sbsprite-wither_artifact { + background-position: -660px -704px +} + +.sbsprite-skull_chest { + background-position: -682px -704px +} + +.sbsprite-pet_skin_elephant_pink { + background-position: -704px -704px +} + +.sbsprite-oak_generator_10 { + background-position: -726px -704px +} + +.sbsprite-slime_generator_1 { + background-position: -748px -704px +} + +.sbsprite-slime_generator_2 { + background-position: -770px -704px +} + +.sbsprite-frozen_blaze_icicle { + background-position: -792px -704px +} + +.sbsprite-oak_generator_11 { + background-position: -814px -704px +} + +.sbsprite-slime_generator_5 { + background-position: -836px -704px +} + +.sbsprite-slime_generator_6 { + background-position: -858px -704px +} + +.sbsprite-slime_generator_3 { + background-position: -880px -704px +} + +.sbsprite-slime_generator_4 { + background-position: -902px -704px +} + +.sbsprite-slime_generator_9 { + background-position: -924px -704px +} + +.sbsprite-slime_generator_7 { + background-position: -946px -704px +} + +.sbsprite-slime_generator_8 { + background-position: -968px -704px +} + +.sbsprite-dungeon_golden_key { + background-position: -990px -704px +} + +.sbsprite-mender_fedora { + background-position: -1012px -704px +} + +.sbsprite-pet_skin_rock_smile { + background-position: -1034px -704px +} + +.sbsprite-builder_orange { + background-position: 0 -726px +} + +.sbsprite-ghast_generator_10 { + background-position: -22px -726px +} + +.sbsprite-beach_chair { + background-position: -44px -726px +} + +.sbsprite-ghast_generator_11 { + background-position: -66px -726px +} + +.sbsprite-boss { + background-position: -88px -726px +} + +.sbsprite-race_precursor_ruins { + background-position: -110px -726px +} + +.sbsprite-perfectly_cut_fuel_tank { + background-position: -132px -726px +} + +.sbsprite-ice_essence { + background-position: -154px -726px +} + +.sbsprite-jerry_box_green { + background-position: -176px -726px +} + +.sbsprite-fireplace { + background-position: -198px -726px +} + +.sbsprite-moldy_bread { + background-position: -220px -726px +} + +.sbsprite-pet_skin_tiger_saber_tooth { + background-position: -242px -726px +} + +.sbsprite-obsidian_generator_5 { + background-position: -264px -726px +} + +.sbsprite-obsidian_generator_4 { + background-position: -286px -726px +} + +.sbsprite-obsidian_generator_7 { + background-position: -308px -726px +} + +.sbsprite-obsidian_generator_6 { + background-position: -330px -726px +} + +.sbsprite-obsidian_generator_1 { + background-position: -352px -726px +} + +.sbsprite-obsidian_generator_3 { + background-position: -374px -726px +} + +.sbsprite-foraging_1_portal { + background-position: -396px -726px +} + +.sbsprite-obsidian_generator_2 { + background-position: -418px -726px +} + +.sbsprite-dungeon_stone_tank { + background-position: -440px -726px +} + +.sbsprite-obsidian_generator_9 { + background-position: -462px -726px +} + +.sbsprite-obsidian_generator_8 { + background-position: -484px -726px +} + +.sbsprite-pet_skin_sheep_light_green { + background-position: -506px -726px +} + +.sbsprite-decayed_bat { + background-position: -528px -726px +} + +.sbsprite-pet_skin_squid_glow { + background-position: -550px -726px +} + +.sbsprite-potato_generator_4 { + background-position: -572px -726px +} + +.sbsprite-potato_generator_5 { + background-position: -594px -726px +} + +.sbsprite-potato_generator_12 { + background-position: -616px -726px +} + +.sbsprite-potato_generator_6 { + background-position: -638px -726px +} + +.sbsprite-potato_generator_11 { + background-position: -660px -726px +} + +.sbsprite-potato_generator_7 { + background-position: -682px -726px +} + +.sbsprite-potato_generator_10 { + background-position: -704px -726px +} + +.sbsprite-potato_generator_8 { + background-position: -726px -726px +} + +.sbsprite-potato_generator_9 { + background-position: -748px -726px +} + +.sbsprite-slayer_energy_drink { + background-position: -770px -726px +} + +.sbsprite-arachne_keeper_fragment { + background-position: -792px -726px +} + +.sbsprite-cat_talisman { + background-position: -814px -726px +} + +.sbsprite-large_slayer_sack { + background-position: -836px -726px +} + +.sbsprite-rune_rainbow { + background-position: -858px -726px +} + +.sbsprite-potato_generator_1 { + background-position: -880px -726px +} + +.sbsprite-potato_generator_2 { + background-position: -902px -726px +} + +.sbsprite-potato_generator_3 { + background-position: -924px -726px +} + +.sbsprite-lime_large_backpack { + background-position: -946px -726px +} + +.sbsprite-bestiary_spiders_den { + background-position: -968px -726px +} + +.sbsprite-ruby_polished_drill_engine { + background-position: -990px -726px +} + +.sbsprite-yellow_jumbo_backpack { + background-position: -1012px -726px +} + +.sbsprite-pet_skin_dolphin_snubnose { + background-position: -1034px -726px +} + +.sbsprite-spider_egg_mixin { + background-position: 0 -748px +} + +.sbsprite-pet_skin_dragon_pastel { + background-position: -22px -748px +} + +.sbsprite-honed_shark_tooth_necklace { + background-position: -44px -748px +} + +.sbsprite-bob_omb { + background-position: -66px -748px +} + +.sbsprite-dungeon_wizard_crystal { + background-position: -88px -748px +} + +.sbsprite-barn_island { + background-position: -110px -748px +} + +.sbsprite-weapon_rack { + background-position: -132px -748px +} + +.sbsprite-shadow_assassin_crimson { + background-position: -154px -748px +} + +.sbsprite-small_talisman_bag { + background-position: -176px -748px +} + +.sbsprite-medium_combat_sack { + background-position: -198px -748px +} + +.sbsprite-bonzo_statue { + background-position: -220px -748px +} + +.sbsprite-zombie_artifact { + background-position: -242px -748px +} + +.sbsprite-cheese_hunter { + background-position: -264px -748px +} + +.sbsprite-hologram { + background-position: -286px -748px +} + +.sbsprite-ultrasequencer { + background-position: -308px -748px +} + +.sbsprite-wise_dragon_helmet { + background-position: -330px -748px +} + +.sbsprite-cyan_medium_backpack { + background-position: -352px -748px +} + +.sbsprite-light_grey_small_backpack { + background-position: -374px -748px +} + +.sbsprite-catacombs_pass_5 { + background-position: -396px -748px +} + +.sbsprite-catacombs_pass_4 { + background-position: -418px -748px +} + +.sbsprite-catacombs_pass_3 { + background-position: -440px -748px +} + +.sbsprite-magma_bucket_upgrade { + background-position: -462px -748px +} + +.sbsprite-catacombs_pass_2 { + background-position: -484px -748px +} + +.sbsprite-coin_redstone { + background-position: -506px -748px +} + +.sbsprite-catacombs_pass_1 { + background-position: -528px -748px +} + +.sbsprite-hermit_crab_10 { + background-position: -550px -748px +} + +.sbsprite-catacombs_pass_0 { + background-position: -572px -748px +} + +.sbsprite-hermit_crab_11 { + background-position: -594px -748px +} + +.sbsprite-dungeon_stone_mage { + background-position: -616px -748px +} + +.sbsprite-gingerbread_personality { + background-position: -638px -748px +} + +.sbsprite-titanium_drill_engine { + background-position: -660px -748px +} + +.sbsprite-catacombs_pass_9 { + background-position: -682px -748px +} + +.sbsprite-fast_travel_dragontail { + background-position: -704px -748px +} + +.sbsprite-catacombs_pass_8 { + background-position: -726px -748px +} + +.sbsprite-catacombs_pass_7 { + background-position: -748px -748px +} + +.sbsprite-reaper_spirit { + background-position: -770px -748px +} + +.sbsprite-catacombs_pass_6 { + background-position: -792px -748px +} + +.sbsprite-armor_of_the_resistance_helmet { + background-position: -814px -748px +} + +.sbsprite-orange_small_backpack { + background-position: -836px -748px +} + +.sbsprite-bait_ring { + background-position: -858px -748px +} + +.sbsprite-luck_talisman { + background-position: -880px -748px +} + +.sbsprite-beach_ball_11 { + background-position: -902px -748px +} + +.sbsprite-beach_ball_10 { + background-position: -924px -748px +} + +.sbsprite-shark_personality { + background-position: -946px -748px +} + +.sbsprite-coal_generator_11 { + background-position: -968px -748px +} + +.sbsprite-coal_generator_12 { + background-position: -990px -748px +} + +.sbsprite-fourth_master_star { + background-position: -1012px -748px +} + +.sbsprite-water_hydra_head { + background-position: -1034px -748px +} + +.sbsprite-coal_generator_10 { + background-position: 0 -770px +} + +.sbsprite-ice_dinner_table { + background-position: -22px -770px +} + +.sbsprite-talisman_enrichment_attack_speed { + background-position: -44px -770px +} + +.sbsprite-gemstone_fuel_tank { + background-position: -66px -770px +} + +.sbsprite-green_large_backpack { + background-position: -88px -770px +} + +.sbsprite-fairy_wings_charm { + background-position: -110px -770px +} + +.sbsprite-rare_diamond { + background-position: -132px -770px +} + +.sbsprite-bunny { + background-position: -154px -770px +} + +.sbsprite-storm_the_fish { + background-position: -176px -770px +} + +.sbsprite-penguin_personality { + background-position: -198px -770px +} + +.sbsprite-shark_1 { + background-position: -220px -770px +} + +.sbsprite-shard_of_the_shredded { + background-position: -242px -770px +} + +.sbsprite-shark_2 { + background-position: -264px -770px +} + +.sbsprite-sheep_generator_11 { + background-position: -286px -770px +} + +.sbsprite-diamonite { + background-position: -308px -770px +} + +.sbsprite-prehistoric_egg { + background-position: -330px -770px +} + +.sbsprite-shark_3 { + background-position: -352px -770px +} + +.sbsprite-sheep_generator_12 { + background-position: -374px -770px +} + +.sbsprite-shark_4 { + background-position: -396px -770px +} + +.sbsprite-shark_5 { + background-position: -418px -770px +} + +.sbsprite-shark_6 { + background-position: -440px -770px +} + +.sbsprite-shark_7 { + background-position: -462px -770px +} + +.sbsprite-shark_8 { + background-position: -484px -770px +} + +.sbsprite-shark_9 { + background-position: -506px -770px +} + +.sbsprite-bbq { + background-position: -528px -770px +} + +.sbsprite-pet_skin_sheep_white { + background-position: -550px -770px +} + +.sbsprite-sheep_generator_10 { + background-position: -572px -770px +} + +.sbsprite-rune_spirit { + background-position: -594px -770px +} + +.sbsprite-aote_stone { + background-position: -616px -770px +} + +.sbsprite-french_bread { + background-position: -638px -770px +} + +.sbsprite-ember_helmet { + background-position: -660px -770px +} + +.sbsprite-large_bed { + background-position: -682px -770px +} + +.sbsprite-builder_bush { + background-position: -704px -770px +} + +.sbsprite-talisman_enrichment_ferocity { + background-position: -726px -770px +} + +.sbsprite-fire_talisman { + background-position: -748px -770px +} + +.sbsprite-purple_candy { + background-position: -770px -770px +} + +.sbsprite-spider_talisman { + background-position: -792px -770px +} + +.sbsprite-intimidation_artifact { + background-position: -814px -770px +} + +.sbsprite-large_candy_sack { + background-position: -836px -770px +} + +.sbsprite-present_10 { + background-position: -858px -770px +} + +.sbsprite-present_11 { + background-position: -880px -770px +} + +.sbsprite-beach_ball_9 { + background-position: -902px -770px +} + +.sbsprite-tarantula_generator_10 { + background-position: -924px -770px +} + +.sbsprite-beach_ball_8 { + background-position: -946px -770px +} + +.sbsprite-gold_sadan_head { + background-position: -968px -770px +} + +.sbsprite-tarantula_generator_11 { + background-position: -990px -770px +} + +.sbsprite-large_enchanted_foraging_sack { + background-position: -1012px -770px +} + +.sbsprite-warrior_dungeon_ability_1 { + background-position: -1034px -770px +} + +.sbsprite-beach_ball_5 { + background-position: 0 -792px +} + +.sbsprite-beach_ball_4 { + background-position: -22px -792px +} + +.sbsprite-beach_ball_7 { + background-position: -44px -792px +} + +.sbsprite-cracked_piggy_bank { + background-position: -66px -792px +} + +.sbsprite-beach_ball_6 { + background-position: -88px -792px +} + +.sbsprite-ice_lolly_11 { + background-position: -110px -792px +} + +.sbsprite-ice_lolly_10 { + background-position: -132px -792px +} + +.sbsprite-razor_sharp_shark_tooth_necklace { + background-position: -154px -792px +} + +.sbsprite-farm_crystal { + background-position: -176px -792px +} + +.sbsprite-bank_upgrade_luxurious { + background-position: -198px -792px +} + +.sbsprite-large_fishing_sack { + background-position: -220px -792px +} + +.sbsprite-lime_small_backpack { + background-position: -242px -792px +} + +.sbsprite-portable_wool_weaver { + background-position: -264px -792px +} + +.sbsprite-beach_ball_1 { + background-position: -286px -792px +} + +.sbsprite-beach_ball_3 { + background-position: -308px -792px +} + +.sbsprite-beach_ball_2 { + background-position: -330px -792px +} + +.sbsprite-revive_stone_orb { + background-position: -352px -792px +} + +.sbsprite-fish_hat { + background-position: -374px -792px +} + +.sbsprite-skull_personality { + background-position: -396px -792px +} + +.sbsprite-builder_onion { + background-position: -418px -792px +} + +.sbsprite-melon_generator_3 { + background-position: -440px -792px +} + +.sbsprite-zombie_generator_9 { + background-position: -462px -792px +} + +.sbsprite-melon_generator_2 { + background-position: -484px -792px +} + +.sbsprite-melon_generator_1 { + background-position: -506px -792px +} + +.sbsprite-melon_generator_7 { + background-position: -528px -792px +} + +.sbsprite-zombie_generator_5 { + background-position: -550px -792px +} + +.sbsprite-melon_generator_6 { + background-position: -572px -792px +} + +.sbsprite-zombie_generator_6 { + background-position: -594px -792px +} + +.sbsprite-melon_generator_5 { + background-position: -616px -792px +} + +.sbsprite-zombie_generator_7 { + background-position: -638px -792px +} + +.sbsprite-melon_generator_4 { + background-position: -660px -792px +} + +.sbsprite-zombie_generator_8 { + background-position: -682px -792px +} + +.sbsprite-zombie_generator_1 { + background-position: -704px -792px +} + +.sbsprite-zombie_generator_2 { + background-position: -726px -792px +} + +.sbsprite-optical_lens { + background-position: -748px -792px +} + +.sbsprite-zombie_generator_3 { + background-position: -770px -792px +} + +.sbsprite-zombie_generator_4 { + background-position: -792px -792px +} + +.sbsprite-beach_umbrella { + background-position: -814px -792px +} + +.sbsprite-diamond_atom { + background-position: -836px -792px +} + +.sbsprite-coin_talisman { + background-position: -858px -792px +} + +.sbsprite-nether_island { + background-position: -880px -792px +} + +.sbsprite-rune_couture { + background-position: -902px -792px +} + +.sbsprite-fish_affinity_talisman { + background-position: -924px -792px +} + +.sbsprite-wedding_ring_4 { + background-position: -946px -792px +} + +.sbsprite-wedding_ring_5 { + background-position: -968px -792px +} + +.sbsprite-wedding_ring_6 { + background-position: -990px -792px +} + +.sbsprite-wedding_ring_7 { + background-position: -1012px -792px +} + +.sbsprite-wedding_ring_8 { + background-position: -1034px -792px +} + +.sbsprite-large_enchanted_combat_sack { + background-position: 0 -814px +} + +.sbsprite-wedding_ring_9 { + background-position: -22px -814px +} + +.sbsprite-rune_clouds { + background-position: -44px -814px +} + +.sbsprite-perfect_amber_gem { + background-position: -66px -814px +} + +.sbsprite-precursor_gear { + background-position: -88px -814px +} + +.sbsprite-wedding_ring_2 { + background-position: -110px -814px +} + +.sbsprite-wedding_ring_3 { + background-position: -132px -814px +} + +.sbsprite-rune_enchant { + background-position: -154px -814px +} + +.sbsprite-god_potion { + background-position: -176px -814px +} + +.sbsprite-rune_magical { + background-position: -198px -814px +} + +.sbsprite-pet_skin_monkey_golden { + background-position: -220px -814px +} + +.sbsprite-spiked_bait { + background-position: -242px -814px +} + +.sbsprite-ghost_11 { + background-position: -264px -814px +} + +.sbsprite-perfect_jasper_gem { + background-position: -286px -814px +} + +.sbsprite-quartz_generator_11 { + background-position: -308px -814px +} + +.sbsprite-sandcastle_1 { + background-position: -330px -814px +} + +.sbsprite-sandcastle_2 { + background-position: -352px -814px +} + +.sbsprite-pet_skin_sheep_pink { + background-position: -374px -814px +} + +.sbsprite-premium_flesh { + background-position: -396px -814px +} + +.sbsprite-sandcastle_5 { + background-position: -418px -814px +} + +.sbsprite-blessed_bait { + background-position: -440px -814px +} + +.sbsprite-sandcastle_6 { + background-position: -462px -814px +} + +.sbsprite-sandcastle_3 { + background-position: -484px -814px +} + +.sbsprite-sandcastle_4 { + background-position: -506px -814px +} + +.sbsprite-wise_wither_helmet { + background-position: -528px -814px +} + +.sbsprite-sandcastle_9 { + background-position: -550px -814px +} + +.sbsprite-quartz_generator_10 { + background-position: -572px -814px +} + +.sbsprite-sandcastle_7 { + background-position: -594px -814px +} + +.sbsprite-sandcastle_8 { + background-position: -616px -814px +} + +.sbsprite-mayor_cole { + background-position: -638px -814px +} + +.sbsprite-fifth_master_star { + background-position: -660px -814px +} + +.sbsprite-ghost_10 { + background-position: -682px -814px +} + +.sbsprite-young_shimmer { + background-position: -704px -814px +} + +.sbsprite-minion_chair { + background-position: -726px -814px +} + +.sbsprite-pig_mask { + background-position: -748px -814px +} + +.sbsprite-hyper_catalyst_upgrade { + background-position: -770px -814px +} + +.sbsprite-potion { + background-position: -792px -814px +} + +.sbsprite-exceedingly_rare_ender_artifact_upgrader { + background-position: -814px -814px +} + +.sbsprite-refined_titanium { + background-position: -836px -814px +} + +.sbsprite-sharp_shark_tooth_necklace { + background-position: -858px -814px +} + +.sbsprite-wreath { + background-position: -880px -814px +} + +.sbsprite-melon_generator_9 { + background-position: -902px -814px +} + +.sbsprite-melon_generator_8 { + background-position: -924px -814px +} + +.sbsprite-epoch_cake_pink { + background-position: -946px -814px +} + +.sbsprite-dungeon_stone_healer { + background-position: -968px -814px +} + +.sbsprite-young_baby { + background-position: -990px -814px +} + +.sbsprite-presents { + background-position: -1012px -814px +} + +.sbsprite-dark_oak_generator_5 { + background-position: -1034px -814px +} + +.sbsprite-dark_oak_generator_6 { + background-position: 0 -836px +} + +.sbsprite-large_enchanted_fishing_sack { + background-position: -22px -836px +} + +.sbsprite-radiant_power_orb { + background-position: -44px -836px +} + +.sbsprite-dark_oak_generator_3 { + background-position: -66px -836px +} + +.sbsprite-large_husbandry_sack { + background-position: -88px -836px +} + +.sbsprite-dark_oak_generator_4 { + background-position: -110px -836px +} + +.sbsprite-dark_oak_generator_9 { + background-position: -132px -836px +} + +.sbsprite-dark_oak_generator_7 { + background-position: -154px -836px +} + +.sbsprite-dark_oak_generator_8 { + background-position: -176px -836px +} + +.sbsprite-dark_oak_generator_1 { + background-position: -198px -836px +} + +.sbsprite-dark_oak_generator_2 { + background-position: -220px -836px +} + +.sbsprite-illusion_glass { + background-position: -242px -836px +} + +.sbsprite-iron_chest { + background-position: -264px -836px +} + +.sbsprite-festive_zombie_personality { + background-position: -286px -836px +} + +.sbsprite-frozen_blaze_helmet { + background-position: -308px -836px +} + +.sbsprite-fast_travel_nest { + background-position: -330px -836px +} + +.sbsprite-brown_greater_backpack { + background-position: -352px -836px +} + +.sbsprite-red_gift { + background-position: -374px -836px +} + +.sbsprite-builder_lemon { + background-position: -396px -836px +} + +.sbsprite-rune_hot { + background-position: -418px -836px +} + +.sbsprite-small_mining_sack { + background-position: -440px -836px +} + +.sbsprite-pet_skin_jerry_green_elf { + background-position: -462px -836px +} + +.sbsprite-amber_polished_drill_engine { + background-position: -484px -836px +} + +.sbsprite-pedestal { + background-position: -506px -836px +} + +.sbsprite-red_claw_artifact { + background-position: -528px -836px +} + +.sbsprite-zombie_generator_11 { + background-position: -550px -836px +} + +.sbsprite-zombie_generator_10 { + background-position: -572px -836px +} + +.sbsprite-wither_relic { + background-position: -594px -836px +} + +.sbsprite-spider_hat { + background-position: -616px -836px +} + +.sbsprite-sludge_juice { + background-position: -638px -836px +} + +.sbsprite-precursor_eye { + background-position: -660px -836px +} + +.sbsprite-fast_travel_scarleton { + background-position: -682px -836px +} + +.sbsprite-connect_four { + background-position: -704px -836px +} + +.sbsprite-sloth_3 { + background-position: -726px -836px +} + +.sbsprite-sloth_4 { + background-position: -748px -836px +} + +.sbsprite-pet_skin_enderman { + background-position: -770px -836px +} + +.sbsprite-sloth_1 { + background-position: -792px -836px +} + +.sbsprite-sloth_2 { + background-position: -814px -836px +} + +.sbsprite-rabbit_generator_9 { + background-position: -836px -836px +} + +.sbsprite-builder_chesto_berry { + background-position: -858px -836px +} + +.sbsprite-rabbit_generator_4 { + background-position: -880px -836px +} + +.sbsprite-sloth_7 { + background-position: -902px -836px +} + +.sbsprite-rabbit_generator_3 { + background-position: -924px -836px +} + +.sbsprite-sloth_8 { + background-position: -946px -836px +} + +.sbsprite-rabbit_generator_2 { + background-position: -968px -836px +} + +.sbsprite-sloth_5 { + background-position: -990px -836px +} + +.sbsprite-rabbit_generator_1 { + background-position: -1012px -836px +} + +.sbsprite-sloth_6 { + background-position: -1034px -836px +} + +.sbsprite-rabbit_generator_8 { + background-position: 0 -858px +} + +.sbsprite-lantern { + background-position: -22px -858px +} + +.sbsprite-rabbit_generator_7 { + background-position: -44px -858px +} + +.sbsprite-rabbit_generator_6 { + background-position: -66px -858px +} + +.sbsprite-sloth_9 { + background-position: -88px -858px +} + +.sbsprite-rabbit_generator_5 { + background-position: -110px -858px +} + +.sbsprite-clownfish_8 { + background-position: -132px -858px +} + +.sbsprite-clownfish_9 { + background-position: -154px -858px +} + +.sbsprite-clownfish_6 { + background-position: -176px -858px +} + +.sbsprite-clownfish_7 { + background-position: -198px -858px +} + +.sbsprite-clownfish_4 { + background-position: -220px -858px +} + +.sbsprite-clownfish_5 { + background-position: -242px -858px +} + +.sbsprite-mender_helmet { + background-position: -264px -858px +} + +.sbsprite-clownfish_2 { + background-position: -286px -858px +} + +.sbsprite-clownfish_3 { + background-position: -308px -858px +} + +.sbsprite-enderman_hat { + background-position: -330px -858px +} + +.sbsprite-superior_dragon_helmet { + background-position: -352px -858px +} + +.sbsprite-clownfish_1 { + background-position: -374px -858px +} + +.sbsprite-reset_heart_of_the_mountain { + background-position: -396px -858px +} + +.sbsprite-lapis_crystal { + background-position: -418px -858px +} + +.sbsprite-purple_jumbo_backpack { + background-position: -440px -858px +} + +.sbsprite-purple_large_backpack { + background-position: -462px -858px +} + +.sbsprite-dragon_claw { + background-position: -484px -858px +} + +.sbsprite-potato_talisman { + background-position: -506px -858px +} + +.sbsprite-nether_warts_generator_12 { + background-position: -528px -858px +} + +.sbsprite-nether_warts_generator_11 { + background-position: -550px -858px +} + +.sbsprite-nether_warts_generator_10 { + background-position: -572px -858px +} + +.sbsprite-yellow_medium_backpack { + background-position: -594px -858px +} + +.sbsprite-acacia_generator_9 { + background-position: -616px -858px +} + +.sbsprite-arachne_crystal { + background-position: -638px -858px +} + +.sbsprite-acacia_generator_8 { + background-position: -660px -858px +} + +.sbsprite-acacia_generator_7 { + background-position: -682px -858px +} + +.sbsprite-helix { + background-position: -704px -858px +} + +.sbsprite-acacia_generator_6 { + background-position: -726px -858px +} + +.sbsprite-mutant_nether_stalk { + background-position: -748px -858px +} + +.sbsprite-acacia_generator_5 { + background-position: -770px -858px +} + +.sbsprite-acacia_generator_4 { + background-position: -792px -858px +} + +.sbsprite-acacia_generator_3 { + background-position: -814px -858px +} + +.sbsprite-acacia_generator_2 { + background-position: -836px -858px +} + +.sbsprite-acacia_generator_1 { + background-position: -858px -858px +} + +.sbsprite-orange_greater_backpack { + background-position: -880px -858px +} + +.sbsprite-boss_collection_professor { + background-position: -902px -858px +} + +.sbsprite-soulflow_engine { + background-position: -924px -858px +} + +.sbsprite-armor_showcase { + background-position: -946px -858px +} + +.sbsprite-gingerbread_2 { + background-position: -968px -858px +} + +.sbsprite-gingerbread_1 { + background-position: -990px -858px +} + +.sbsprite-gingerbread_6 { + background-position: -1012px -858px +} + +.sbsprite-gingerbread_5 { + background-position: -1034px -858px +} + +.sbsprite-gingerbread_4 { + background-position: 0 -880px +} + +.sbsprite-small_backpack { + background-position: -22px -880px +} + +.sbsprite-gingerbread_3 { + background-position: -44px -880px +} + +.sbsprite-gingerbread_9 { + background-position: -66px -880px +} + +.sbsprite-gingerbread_8 { + background-position: -88px -880px +} + +.sbsprite-gingerbread_7 { + background-position: -110px -880px +} + +.sbsprite-small_fishing_sack { + background-position: -132px -880px +} + +.sbsprite-fast_travel_castle { + background-position: -154px -880px +} + +.sbsprite-glacite_jewel { + background-position: -176px -880px +} + +.sbsprite-medium_agronomy_sack { + background-position: -198px -880px +} + +.sbsprite-mining_fortune { + background-position: -220px -880px +} + +.sbsprite-pet_item_spooky_cupcake { + background-position: -242px -880px +} + +.sbsprite-red_medium_backpack { + background-position: -264px -880px +} + +.sbsprite-third_master_star { + background-position: -286px -880px +} + +.sbsprite-pet_skin_phoenix_ice { + background-position: -308px -880px +} + +.sbsprite-golem_hat { + background-position: -330px -880px +} + +.sbsprite-ghost_personality { + background-position: -352px -880px +} + +.sbsprite-epoch_cake_yellow { + background-position: -374px -880px +} + +.sbsprite-creeper_generator_11 { + background-position: -396px -880px +} + +.sbsprite-creeper_generator_10 { + background-position: -418px -880px +} + +.sbsprite-magenta_medium_backpack { + background-position: -440px -880px +} + +.sbsprite-pet_skin_elephant_green { + background-position: -462px -880px +} + +.sbsprite-soulflow_pile { + background-position: -484px -880px +} + +.sbsprite-pumpkin_personality { + background-position: -506px -880px +} + +.sbsprite-small_slayer_sack { + background-position: -528px -880px +} + +.sbsprite-poisoned_candle { + background-position: -550px -880px +} + +.sbsprite-bestiary_crimson_isle { + background-position: -572px -880px +} + +.sbsprite-ring_potion_affinity { + background-position: -594px -880px +} + +.sbsprite-rock_gemstone { + background-position: -616px -880px +} + +.sbsprite-blood_god_crest { + background-position: -638px -880px +} + +.sbsprite-judgement_core { + background-position: -660px -880px +} + +.sbsprite-rune_tidal { + background-position: -682px -880px +} + +.sbsprite-lava_talisman { + background-position: -704px -880px +} + +.sbsprite-revived_heart { + background-position: -726px -880px +} + +.sbsprite-killer_personality { + background-position: -748px -880px +} + +.sbsprite-snow_suit_helmet { + background-position: -770px -880px +} + +.sbsprite-blobfish_hat { + background-position: -792px -880px +} + +.sbsprite-stool { + background-position: -814px -880px +} + +.sbsprite-builder_blue_corn { + background-position: -836px -880px +} + +.sbsprite-pulpous_orange_juice { + background-position: -858px -880px +} + +.sbsprite-fast_travel_drag { + background-position: -880px -880px +} + +.sbsprite-tank_dungeon_ability_2 { + background-position: -902px -880px +} + +.sbsprite-tank_dungeon_ability_1 { + background-position: -924px -880px +} + +.sbsprite-treasure_talisman { + background-position: -946px -880px +} + +.sbsprite-bookcase { + background-position: -968px -880px +} + +.sbsprite-skeletor_helmet { + background-position: -990px -880px +} + +.sbsprite-unstable_baby { + background-position: -1012px -880px +} + +.sbsprite-large_combat_sack { + background-position: -1034px -880px +} + +.sbsprite-minos_relic { + background-position: 0 -902px +} + +.sbsprite-pet_item_bubblegum { + background-position: -22px -902px +} + +.sbsprite-small_xtree { + background-position: -44px -902px +} + +.sbsprite-epoch_cake_aqua { + background-position: -66px -902px +} + +.sbsprite-wither_blood { + background-position: -88px -902px +} + +.sbsprite-egg_hunt { + background-position: -110px -902px +} + +.sbsprite-rune_fire_spiral { + background-position: -132px -902px +} + +.sbsprite-wither_goggles { + background-position: -154px -902px +} + +.sbsprite-egg_stack { + background-position: -176px -902px +} + +.sbsprite-mummy_candle { + background-position: -198px -902px +} + +.sbsprite-enchanted_book_bundle_big_brain { + background-position: -220px -902px +} + +.sbsprite-builder_beetroot { + background-position: -242px -902px +} + +.sbsprite-rabbit_generator_11 { + background-position: -264px -902px +} + +.sbsprite-rabbit_generator_10 { + background-position: -286px -902px +} + +.sbsprite-rabbit_generator_12 { + background-position: -308px -902px +} + +.sbsprite-rotten_apple { + background-position: -330px -902px +} + +.sbsprite-etherwarp_merger { + background-position: -352px -902px +} + +.sbsprite-redstone_generator_11 { + background-position: -374px -902px +} + +.sbsprite-redstone_generator_10 { + background-position: -396px -902px +} + +.sbsprite-protector_baby { + background-position: -418px -902px +} + +.sbsprite-fast_travel_deep { + background-position: -440px -902px +} + +.sbsprite-polished_pumpkin { + background-position: -462px -902px +} + +.sbsprite-redstone_generator_12 { + background-position: -484px -902px +} + +.sbsprite-tic_tac_toe { + background-position: -506px -902px +} + +.sbsprite-foraging_2_portal { + background-position: -528px -902px +} + +.sbsprite-recombobulator_3000 { + background-position: -550px -902px +} + +.sbsprite-sand_generator_7 { + background-position: -572px -902px +} + +.sbsprite-sand_generator_8 { + background-position: -594px -902px +} + +.sbsprite-sand_generator_9 { + background-position: -616px -902px +} + +.sbsprite-scarecrow_personality { + background-position: -638px -902px +} + +.sbsprite-pet_skin_sheep_aqua { + background-position: -660px -902px +} + +.sbsprite-skull_10 { + background-position: -682px -902px +} + +.sbsprite-melon_personality { + background-position: -704px -902px +} + +.sbsprite-skull_11 { + background-position: -726px -902px +} + +.sbsprite-flawed_amethyst_gem { + background-position: -748px -902px +} + +.sbsprite-revive_stone { + background-position: -770px -902px +} + +.sbsprite-creeper_generator_9 { + background-position: -792px -902px +} + +.sbsprite-creeper_generator_8 { + background-position: -814px -902px +} + +.sbsprite-potato_basket { + background-position: -836px -902px +} + +.sbsprite-diamond_essence { + background-position: -858px -902px +} + +.sbsprite-creeper_generator_7 { + background-position: -880px -902px +} + +.sbsprite-creeper_generator_6 { + background-position: -902px -902px +} + +.sbsprite-creeper_generator_5 { + background-position: -924px -902px +} + +.sbsprite-creeper_generator_4 { + background-position: -946px -902px +} + +.sbsprite-creeper_generator_3 { + background-position: -968px -902px +} + +.sbsprite-creeper_generator_2 { + background-position: -990px -902px +} + +.sbsprite-sand_generator_1 { + background-position: -1012px -902px +} + +.sbsprite-creeper_generator_1 { + background-position: -1034px -902px +} + +.sbsprite-sand_generator_2 { + background-position: 0 -924px +} + +.sbsprite-sand_generator_3 { + background-position: -22px -924px +} + +.sbsprite-sand_generator_4 { + background-position: -44px -924px +} + +.sbsprite-sand_generator_5 { + background-position: -66px -924px +} + +.sbsprite-jerry_box_golden { + background-position: -88px -924px +} + +.sbsprite-sand_generator_6 { + background-position: -110px -924px +} + +.sbsprite-seal_of_the_family { + background-position: -132px -924px +} + +.sbsprite-gemstone_chamber { + background-position: -154px -924px +} + +.sbsprite-aqua { + background-position: -176px -924px +} + +.sbsprite-ice_hunk { + background-position: -198px -924px +} + +.sbsprite-crystal_ball { + background-position: -220px -924px +} + +.sbsprite-ice_chair { + background-position: -242px -924px +} + +.sbsprite-sandcastle_11 { + background-position: -264px -924px +} + +.sbsprite-sandcastle_10 { + background-position: -286px -924px +} + +.sbsprite-furnace_plus { + background-position: -308px -924px +} + +.sbsprite-pig_generator_12 { + background-position: -330px -924px +} + +.sbsprite-pig_generator_11 { + background-position: -352px -924px +} + +.sbsprite-pig_generator_10 { + background-position: -374px -924px +} + +.sbsprite-nether_artifact { + background-position: -396px -924px +} + +.sbsprite-chicken_generator_1 { + background-position: -418px -924px +} + +.sbsprite-sniper_helmet { + background-position: -440px -924px +} + +.sbsprite-chicken_generator_4 { + background-position: -462px -924px +} + +.sbsprite-chicken_generator_5 { + background-position: -484px -924px +} + +.sbsprite-heat_core { + background-position: -506px -924px +} + +.sbsprite-chicken_generator_2 { + background-position: -528px -924px +} + +.sbsprite-wishing_compass { + background-position: -550px -924px +} + +.sbsprite-chicken_generator_3 { + background-position: -572px -924px +} + +.sbsprite-desk { + background-position: -594px -924px +} + +.sbsprite-white_large_backpack { + background-position: -616px -924px +} + +.sbsprite-hub_portal { + background-position: -638px -924px +} + +.sbsprite-spruce_generator_10 { + background-position: -660px -924px +} + +.sbsprite-spruce_generator_11 { + background-position: -682px -924px +} + +.sbsprite-chicken_generator_8 { + background-position: -704px -924px +} + +.sbsprite-mithril_generator_9 { + background-position: -726px -924px +} + +.sbsprite-scarf_thesis { + background-position: -748px -924px +} + +.sbsprite-chicken_generator_9 { + background-position: -770px -924px +} + +.sbsprite-mithril_generator_8 { + background-position: -792px -924px +} + +.sbsprite-fast_travel_da { + background-position: -814px -924px +} + +.sbsprite-chicken_generator_6 { + background-position: -836px -924px +} + +.sbsprite-mithril_generator_7 { + background-position: -858px -924px +} + +.sbsprite-zombie_ring { + background-position: -880px -924px +} + +.sbsprite-chicken_generator_7 { + background-position: -902px -924px +} + +.sbsprite-mithril_generator_6 { + background-position: -924px -924px +} + +.sbsprite-wood_chest { + background-position: -946px -924px +} + +.sbsprite-glowstone_generator_8 { + background-position: -968px -924px +} + +.sbsprite-mithril_generator_1 { + background-position: -990px -924px +} + +.sbsprite-pink_bunny_12 { + background-position: -1012px -924px +} + +.sbsprite-purple_medium_backpack { + background-position: -1034px -924px +} + +.sbsprite-glowstone_generator_7 { + background-position: 0 -946px +} + +.sbsprite-pink_bunny_11 { + background-position: -22px -946px +} + +.sbsprite-pink_bunny_10 { + background-position: -44px -946px +} + +.sbsprite-glowstone_generator_9 { + background-position: -66px -946px +} + +.sbsprite-glowstone_generator_4 { + background-position: -88px -946px +} + +.sbsprite-mithril_generator_5 { + background-position: -110px -946px +} + +.sbsprite-glowstone_generator_3 { + background-position: -132px -946px +} + +.sbsprite-mithril_generator_4 { + background-position: -154px -946px +} + +.sbsprite-glowstone_generator_6 { + background-position: -176px -946px +} + +.sbsprite-mithril_generator_3 { + background-position: -198px -946px +} + +.sbsprite-glowstone_generator_5 { + background-position: -220px -946px +} + +.sbsprite-mithril_generator_2 { + background-position: -242px -946px +} + +.sbsprite-very_official_yellow_rock { + background-position: -264px -946px +} + +.sbsprite-bat_person_talisman { + background-position: -286px -946px +} + +.sbsprite-cyan_large_backpack { + background-position: -308px -946px +} + +.sbsprite-fairy_soul { + background-position: -330px -946px +} + +.sbsprite-ghost_8 { + background-position: -352px -946px +} + +.sbsprite-ghost_9 { + background-position: -374px -946px +} + +.sbsprite-power_talisman { + background-position: -396px -946px +} + +.sbsprite-ghost_4 { + background-position: -418px -946px +} + +.sbsprite-decent_coffee { + background-position: -440px -946px +} + +.sbsprite-ghost_5 { + background-position: -462px -946px +} + +.sbsprite-ember_fragment { + background-position: -484px -946px +} + +.sbsprite-ghost_6 { + background-position: -506px -946px +} + +.sbsprite-ghost_7 { + background-position: -528px -946px +} + +.sbsprite-dull_shark_tooth_necklace { + background-position: -550px -946px +} + +.sbsprite-ghost_1 { + background-position: -572px -946px +} + +.sbsprite-ghost_2 { + background-position: -594px -946px +} + +.sbsprite-ghost_3 { + background-position: -616px -946px +} + +.sbsprite-gold_gift { + background-position: -638px -946px +} + +.sbsprite-tank_wither_helmet { + background-position: -660px -946px +} + +.sbsprite-spider_ring { + background-position: -682px -946px +} + +.sbsprite-santa_10 { + background-position: -704px -946px +} + +.sbsprite-santa_11 { + background-position: -726px -946px +} + +.sbsprite-yellow_greater_backpack { + background-position: -748px -946px +} + +.sbsprite-sapphire_crystal { + background-position: -770px -946px +} + +.sbsprite-mayor_foxy { + background-position: -792px -946px +} + +.sbsprite-starred_shadow_assassin_helmet { + background-position: -814px -946px +} + +.sbsprite-god_potion_2 { + background-position: -836px -946px +} + +.sbsprite-goblin_helmet { + background-position: -858px -946px +} + +.sbsprite-diamond_generator_5 { + background-position: -880px -946px +} + +.sbsprite-lesser_orb_of_healing { + background-position: -902px -946px +} + +.sbsprite-diamond_generator_6 { + background-position: -924px -946px +} + +.sbsprite-diamond_generator_3 { + background-position: -946px -946px +} + +.sbsprite-pet_skin_jerry_red_elf { + background-position: -968px -946px +} + +.sbsprite-diamond_generator_4 { + background-position: -990px -946px +} + +.sbsprite-lady_bug_10 { + background-position: -1012px -946px +} + +.sbsprite-diamond_generator_1 { + background-position: -1034px -946px +} + +.sbsprite-star_decorations { + background-position: 0 -968px +} + +.sbsprite-diamond_generator_2 { + background-position: -22px -968px +} + +.sbsprite-bingo_artifact { + background-position: -44px -968px +} + +.sbsprite-diamond_generator_9 { + background-position: -66px -968px +} + +.sbsprite-lady_bug_11 { + background-position: -88px -968px +} + +.sbsprite-diamond_generator_7 { + background-position: -110px -968px +} + +.sbsprite-diamond_generator_8 { + background-position: -132px -968px +} + +.sbsprite-heart_of_the_mountain { + background-position: -154px -968px +} + +.sbsprite-glowstone_generator_2 { + background-position: -176px -968px +} + +.sbsprite-glowstone_generator_1 { + background-position: -198px -968px +} + +.sbsprite-pink_donut_personality { + background-position: -220px -968px +} + +.sbsprite-artifact_of_space { + background-position: -242px -968px +} + +.sbsprite-lesser_soulflow_engine { + background-position: -264px -968px +} + +.sbsprite-mithril_crystal { + background-position: -286px -968px +} + +.sbsprite-young_fragment { + background-position: -308px -968px +} + +.sbsprite-master_catacombs_pass_10 { + background-position: -330px -968px +} + +.sbsprite-flying_bats { + background-position: -352px -968px +} + +.sbsprite-light_blue_medium_backpack { + background-position: -374px -968px +} + +.sbsprite-fast_travel_hub { + background-position: -396px -968px +} + +.sbsprite-pumpkin_generator_2 { + background-position: -418px -968px +} + +.sbsprite-pumpkin_generator_1 { + background-position: -440px -968px +} + +.sbsprite-pumpkin_generator_4 { + background-position: -462px -968px +} + +.sbsprite-end_helmet { + background-position: -484px -968px +} + +.sbsprite-pumpkin_generator_3 { + background-position: -506px -968px +} + +.sbsprite-pumpkin_generator_6 { + background-position: -528px -968px +} + +.sbsprite-titanium_talisman { + background-position: -550px -968px +} + +.sbsprite-pumpkin_generator_5 { + background-position: -572px -968px +} + +.sbsprite-reaper_gem { + background-position: -594px -968px +} + +.sbsprite-rune_zap { + background-position: -616px -968px +} + +.sbsprite-pumpkin_generator_8 { + background-position: -638px -968px +} + +.sbsprite-pumpkin_generator_7 { + background-position: -660px -968px +} + +.sbsprite-pumpkin_generator_9 { + background-position: -682px -968px +} + +.sbsprite-crooked_artifact { + background-position: -704px -968px +} + +.sbsprite-haste_ring { + background-position: -726px -968px +} + +.sbsprite-soulflow_battery { + background-position: -748px -968px +} + +.sbsprite-medium_mining_sack { + background-position: -770px -968px +} + +.sbsprite-skull_1 { + background-position: -792px -968px +} + +.sbsprite-coffin { + background-position: -814px -968px +} + +.sbsprite-chest_shelves { + background-position: -836px -968px +} + +.sbsprite-power_ring { + background-position: -858px -968px +} + +.sbsprite-white_medium_backpack { + background-position: -880px -968px +} + +.sbsprite-divan_fragment { + background-position: -902px -968px +} + +.sbsprite-skull_8 { + background-position: -924px -968px +} + +.sbsprite-gold_essence { + background-position: -946px -968px +} + +.sbsprite-skull_9 { + background-position: -968px -968px +} + +.sbsprite-skull_6 { + background-position: -990px -968px +} + +.sbsprite-skull_7 { + background-position: -1012px -968px +} + +.sbsprite-skull_4 { + background-position: -1034px -968px +} + +.sbsprite-skull_5 { + background-position: 0 -990px +} + +.sbsprite-skull_2 { + background-position: -22px -990px +} + +.sbsprite-skull_3 { + background-position: -44px -990px +} + +.sbsprite-black_jumbo_backpack { + background-position: -66px -990px +} + +.sbsprite-fast_travel_mines { + background-position: -88px -990px +} + +.sbsprite-skull_vase { + background-position: -110px -990px +} + +.sbsprite-fishing_generator_8 { + background-position: -132px -990px +} + +.sbsprite-fishing_generator_7 { + background-position: -154px -990px +} + +.sbsprite-fishing_generator_6 { + background-position: -176px -990px +} + +.sbsprite-fishing_generator_5 { + background-position: -198px -990px +} + +.sbsprite-fishing_generator_4 { + background-position: -220px -990px +} + +.sbsprite-lime_jumbo_backpack { + background-position: -242px -990px +} + +.sbsprite-fishing_generator_3 { + background-position: -264px -990px +} + +.sbsprite-fishing_generator_2 { + background-position: -286px -990px +} + +.sbsprite-fishing_generator_1 { + background-position: -308px -990px +} + +.sbsprite-fishing_generator_9 { + background-position: -330px -990px +} + +.sbsprite-yellow_large_backpack { + background-position: -352px -990px +} + +.sbsprite-amber_crystal { + background-position: -374px -990px +} + +.sbsprite-suspicious_vial { + background-position: -396px -990px +} + +.sbsprite-campfire { + background-position: -418px -990px +} + +.sbsprite-snow_generator_4 { + background-position: -440px -990px +} + +.sbsprite-snow_generator_5 { + background-position: -462px -990px +} + +.sbsprite-ring_of_space { + background-position: -484px -990px +} + +.sbsprite-snow_generator_6 { + background-position: -506px -990px +} + +.sbsprite-talisman_enrichment_walk_speed { + background-position: -528px -990px +} + +.sbsprite-snow_generator_7 { + background-position: -550px -990px +} + +.sbsprite-snow_generator_1 { + background-position: -572px -990px +} + +.sbsprite-snow_generator_2 { + background-position: -594px -990px +} + +.sbsprite-snow_generator_3 { + background-position: -616px -990px +} + +.sbsprite-lime_medium_backpack { + background-position: -638px -990px +} + +.sbsprite-end_stone_1 { + background-position: -660px -990px +} + +.sbsprite-strong_fragment { + background-position: -682px -990px +} + +.sbsprite-small_foraging_sack { + background-position: -704px -990px +} + +.sbsprite-synthetic_heart { + background-position: -726px -990px +} + +.sbsprite-end_stone_4 { + background-position: -748px -990px +} + +.sbsprite-diamond_sadan_head { + background-position: -770px -990px +} + +.sbsprite-end_stone_5 { + background-position: -792px -990px +} + +.sbsprite-end_stone_2 { + background-position: -814px -990px +} + +.sbsprite-end_stone_3 { + background-position: -836px -990px +} + +.sbsprite-diamond_bonzo_head { + background-position: -858px -990px +} + +.sbsprite-end_stone_8 { + background-position: -880px -990px +} + +.sbsprite-end_stone_9 { + background-position: -902px -990px +} + +.sbsprite-end_stone_6 { + background-position: -924px -990px +} + +.sbsprite-end_stone_7 { + background-position: -946px -990px +} + +.sbsprite-snow_generator_8 { + background-position: -968px -990px +} + +.sbsprite-snow_generator_9 { + background-position: -990px -990px +} + +.sbsprite-ender_stone_generator_4 { + background-position: -1012px -990px +} + +.sbsprite-epoch_cake_blue { + background-position: -1034px -990px +} + +.sbsprite-sand_generator_10 { + background-position: 0 -1012px +} + +.sbsprite-ender_stone_generator_3 { + background-position: -22px -1012px +} + +.sbsprite-sand_generator_11 { + background-position: -44px -1012px +} + +.sbsprite-ender_stone_generator_2 { + background-position: -66px -1012px +} + +.sbsprite-ender_stone_generator_1 { + background-position: -88px -1012px +} + +.sbsprite-pet_skin_sheep_neon_yellow { + background-position: -110px -1012px +} + +.sbsprite-fast_travel_spider { + background-position: -132px -1012px +} + +.sbsprite-pet_skin_sheep_blue { + background-position: -154px -1012px +} + +.sbsprite-epoch_cake_black { + background-position: -176px -1012px +} + +.sbsprite-wise_baby { + background-position: -198px -1012px +} + +.sbsprite-chronomatron { + background-position: -220px -1012px +} + +.sbsprite-scarf_grimoire { + background-position: -242px -1012px +} + +.sbsprite-bestiary_hub { + background-position: -264px -1012px +} + +.sbsprite-ender_stone_generator_9 { + background-position: -286px -1012px +} + +.sbsprite-ender_stone_generator_8 { + background-position: -308px -1012px +} + +.sbsprite-ender_stone_generator_7 { + background-position: -330px -1012px +} + +.sbsprite-ender_stone_generator_6 { + background-position: -352px -1012px +} + +.sbsprite-ender_stone_generator_5 { + background-position: -374px -1012px +} + +.sbsprite-small_gemstone_sack { + background-position: -396px -1012px +} + +.sbsprite-flawless_ruby_gem { + background-position: -418px -1012px +} + +.sbsprite-gold_necron_head { + background-position: -440px -1012px +} + +.sbsprite-small_husbandry_sack { + background-position: -462px -1012px +} + +.sbsprite-reaper_orb { + background-position: -484px -1012px +} + +.sbsprite-blaze_helmet { + background-position: -506px -1012px +} + +.sbsprite-bee_personality { + background-position: -528px -1012px +} + +.sbsprite-fishing { + background-position: -550px -1012px +} + +.sbsprite-titanium_ring { + background-position: -572px -1012px +} + +.sbsprite-lime { + background-position: -594px -1012px +} + +.sbsprite-feather_talisman { + background-position: -616px -1012px +} + +.sbsprite-rough_jasper_gem { + background-position: -638px -1012px +} + +.sbsprite-goblin_omelette_spicy { + background-position: -660px -1012px +} + +.sbsprite-gold_generator_11 { + background-position: -682px -1012px +} + +.sbsprite-gold_generator_10 { + background-position: -704px -1012px +} + +.sbsprite-gold_generator_12 { + background-position: -726px -1012px +} + +.sbpet-sheep_green { + background-position: 0 0 +} + +.sbpet-sheep_yellow { + background-position: -20px 0 +} + +.sbpet-bal { + background-position: -40px 0 +} + +.sbpet-grandma_wolf { + background-position: -60px 0 +} + +.sbpet-sheep_orange { + background-position: -80px 0 +} + +.sbpet-sheep_red { + background-position: -100px 0 +} + +.sbpet-bat { + background-position: -120px 0 +} + +.sbpet-elephant_red { + background-position: -140px 0 +} + +.sbpet-rabbit { + background-position: -160px 0 +} + +.sbpet-megalodon_baby { + background-position: -180px 0 +} + +.sbpet-silverfish { + background-position: -200px 0 +} + +.sbpet-ghoul { + background-position: -220px 0 +} + +.sbpet-pigman { + background-position: 0 -22px +} + +.sbpet-elephant_orange { + background-position: -20px -22px +} + +.sbpet-jerry { + background-position: -40px -22px +} + +.sbpet-sheep_neon_yellow { + background-position: -60px -22px +} + +.sbpet-rat { + background-position: -80px -22px +} + +.sbpet-tiger { + background-position: -100px -22px +} + +.sbpet-lion { + background-position: -120px -22px +} + +.sbpet-horse { + background-position: -140px -22px +} + +.sbpet-sheep_neon_green { + background-position: -160px -22px +} + +.sbpet-giraffe { + background-position: -180px -22px +} + +.sbpet-black_cat_ivory { + background-position: -200px -22px +} + +.sbpet-golden_dragon { + background-position: -220px -22px +} + +.sbpet-rock_derp { + background-position: 0 -44px +} + +.sbpet-parrot { + background-position: -20px -44px +} + +.sbpet-sheep_blue { + background-position: -40px -44px +} + +.sbpet-monkey_golden { + background-position: -60px -44px +} + +.sbpet-jellyfish { + background-position: -80px -44px +} + +.sbpet-horse_zombie { + background-position: -100px -44px +} + +.sbpet-sheep_purple { + background-position: -120px -44px +} + +.sbpet-elephant_purple { + background-position: -140px -44px +} + +.sbpet-endermite_radiant { + background-position: -160px -44px +} + +.sbpet-rock { + background-position: -180px -44px +} + +.sbpet-default { + background-position: -200px -44px +} + +.sbpet-blaze { + background-position: -220px -44px +} + +.sbpet-endermite { + background-position: 0 -66px +} + +.sbpet-megalodon_bullhead { + background-position: -20px -66px +} + +.sbpet-hound_beagle { + background-position: -40px -66px +} + +.sbpet-zombie { + background-position: -60px -66px +} + +.sbpet-guardian { + background-position: -80px -66px +} + +.sbpet-scatha { + background-position: -100px -66px +} + +.sbpet-wolf { + background-position: -120px -66px +} + +.sbpet-rabbit_aquamarine { + background-position: -140px -66px +} + +.sbpet-spirit { + background-position: -160px -66px +} + +.sbpet-hound { + background-position: -180px -66px +} + +.sbpet-dragon_neon_purple { + background-position: -200px -66px +} + +.sbpet-tiger_twilight { + background-position: -220px -66px +} + +.sbpet-sheep_light_green { + background-position: 0 -88px +} + +.sbpet-monkey_gorilla { + background-position: -20px -88px +} + +.sbpet-spider { + background-position: -40px -88px +} + +.sbpet-mithril_golem { + background-position: -60px -88px +} + +.sbpet-dolphin_snubnose { + background-position: -80px -88px +} + +.sbpet-snowman { + background-position: -100px -88px +} + +.sbpet-bee { + background-position: -120px -88px +} + +.sbpet-monkey { + background-position: -140px -88px +} + +.sbpet-jerry_red_elf { + background-position: -160px -88px +} + +.sbpet-elephant_pink { + background-position: -180px -88px +} + +.sbpet-sheep_brown { + background-position: -200px -88px +} + +.sbpet-magma_cube { + background-position: -220px -88px +} + +.sbpet-pig { + background-position: 0 -110px +} + +.sbpet-blue_whale { + background-position: -20px -110px +} + +.sbpet-skeleton { + background-position: -40px -110px +} + +.sbpet-phoenix_ice { + background-position: -60px -110px +} + +.sbpet-ammonite { + background-position: -80px -110px +} + +.sbpet-elephant_green { + background-position: -100px -110px +} + +.sbpet-armadillo { + background-position: -120px -110px +} + +.sbpet-dolphin { + background-position: -140px -110px +} + +.sbpet-turtle { + background-position: -160px -110px +} + +.sbpet-dragon_neon_red { + background-position: -180px -110px +} + +.sbpet-tiger_saber_tooth { + background-position: -200px -110px +} + +.sbpet-wither_skeleton { + background-position: -220px -110px +} + +.sbpet-parrot_blue_macaw { + background-position: 0 -132px +} + +.sbpet-ocelot { + background-position: -20px -132px +} + +.sbpet-sheep_light_gray { + background-position: -40px -132px +} + +.sbpet-elephant_blue { + background-position: -60px -132px +} + +.sbpet-chicken_baby_chick { + background-position: -80px -132px +} + +.sbpet-rock_thinking { + background-position: -100px -132px +} + +.sbpet-enderman_slayer { + background-position: -120px -132px +} + +.sbpet-ender_dragon { + background-position: -140px -132px +} + +.sbpet-rabbit_rose { + background-position: -160px -132px +} + +.sbpet-sheep_white { + background-position: -180px -132px +} + +.sbpet-silverfish_fossilized { + background-position: -200px -132px +} + +.sbpet-squid { + background-position: -220px -132px +} + +.sbpet-sheep_light_blue { + background-position: 0 -154px +} + +.sbpet-elephant { + background-position: -20px -154px +} + +.sbpet-golden_dragon_egg { + background-position: -40px -154px +} + +.sbpet-enderman { + background-position: -60px -154px +} + +.sbpet-chicken { + background-position: -80px -154px +} + +.sbpet-parrot_gold_macaw { + background-position: -100px -154px +} + +.sbpet-sheep_gray { + background-position: -120px -154px +} + +.sbpet-rock_cool { + background-position: -140px -154px +} + +.sbpet-rock_laugh { + background-position: -160px -154px +} + +.sbpet-sheep_black { + background-position: -180px -154px +} + +.sbpet-sheep_neon_blue { + background-position: -200px -154px +} + +.sbpet-rock_embarrassed { + background-position: -220px -154px +} + +.sbpet-dragon_neon_blue { + background-position: 0 -176px +} + +.sbpet-sheep { + background-position: -20px -176px +} + +.sbpet-baby_yeti { + background-position: -40px -176px +} + +.sbpet-sheep_aqua { + background-position: -60px -176px +} + +.sbpet-sheep_pink { + background-position: -80px -176px +} + +.sbpet-elephant_monochrome { + background-position: -100px -176px +} + +.sbpet-wolf_henzo_doggo { + background-position: -120px -176px +} + +.sbpet-squid_glow { + background-position: -140px -176px +} + +.sbpet-flying_fish { + background-position: -160px -176px +} + +.sbpet-griffin { + background-position: -180px -176px +} + +.sbpet-jerry_green_elf { + background-position: -200px -176px +} + +.sbpet-dragon_pastel { + background-position: -220px -176px +} + +.sbpet-sheep_neon_red { + background-position: 0 -198px +} + +.sbpet-sheep_magenta { + background-position: -20px -198px +} + +.sbpet-skeleton_horse { + background-position: -40px -198px +} + +.sbpet-megalodon { + background-position: -60px -198px +} + +.sbpet-lion_lioness { + background-position: -80px -198px +} + +.sbpet-tarantula { + background-position: -100px -198px +} + +.sbpet-yeti_grown_up { + background-position: -120px -198px +} + +.sbpet-phoenix { + background-position: -140px -198px +} + +.sbpet-golem { + background-position: -160px -198px +} + +.sbpet-black_cat { + background-position: -180px -198px +} + +.sbpet-whale_orca { + background-position: -200px -198px +} + +.sbpet-rock_smile { + background-position: -220px -198px +} + +.sbpet-wither { + background-position: 0 -220px +} + +.sbpet-black_cat_onyx { + background-position: -20px -220px +} + +.sbspray-AngryTurkey { + background-position: 0 0 +} + +.sbspray-AnotherDimension { + background-position: -128px 0 +} + +.sbspray-BlueArrowE { + background-position: -256px 0 +} + +.sbspray-BlueArrowN { + background-position: -384px 0 +} + +.sbspray-BlueArrowNE { + background-position: -512px 0 +} + +.sbspray-BlueArrowNW { + background-position: -640px 0 +} + +.sbspray-BlueArrowS { + background-position: -768px 0 +} + +.sbspray-BlueArrowSE { + background-position: -896px 0 +} + +.sbspray-BlueArrowSW { + background-position: -1024px 0 +} + +.sbspray-BlueArrowW { + background-position: -1152px 0 +} + +.sbspray-Bonzo { + background-position: 0 -128px +} + +.sbspray-Boom { + background-position: -128px -128px +} + +.sbspray-BunnyGG { + background-position: -256px -128px +} + +.sbspray-ChestGlow { + background-position: -384px -128px +} + +.sbspray-Chill { + background-position: -512px -128px +} + +.sbspray-Chimney { + background-position: -640px -128px +} + +.sbspray-ChocolateFeast { + background-position: -768px -128px +} + +.sbspray-ChristmasTree { + background-position: -896px -128px +} + +.sbspray-Coconut { + background-position: -1024px -128px +} + +.sbspray-Creeper { + background-position: -1152px -128px +} + +.sbspray-EasterBasket { + background-position: 0 -256px +} + +.sbspray-EasterCreeper { + background-position: -128px -256px +} + +.sbspray-EasterEggs { + background-position: -256px -256px +} + +.sbspray-Eek { + background-position: -384px -256px +} + +.sbspray-EggHunt { + background-position: -512px -256px +} + +.sbspray-EggSurprise { + background-position: -640px -256px +} + +.sbspray-Faboolous { + background-position: -768px -256px +} + +.sbspray-FarmingArrowE { + background-position: -896px -256px +} + +.sbspray-FarmingArrowN { + background-position: -1024px -256px +} + +.sbspray-FarmingArrowS { + background-position: -1152px -256px +} + +.sbspray-FarmingArrowW { + background-position: 0 -384px +} + +.sbspray-FoundU { + background-position: -128px -384px +} + +.sbspray-Garlic { + background-position: -256px -384px +} + +.sbspray-GenericArmor { + background-position: -384px -384px +} + +.sbspray-GenericBooks { + background-position: -512px -384px +} + +.sbspray-GenericFishing { + background-position: -640px -384px +} + +.sbspray-GenericMob { + background-position: -768px -384px +} + +.sbspray-GenericOres { + background-position: -896px -384px +} + +.sbspray-GenericPotions { + background-position: -1024px -384px +} + +.sbspray-GenericWeapons { + background-position: -1152px -384px +} + +.sbspray-GoldenEgg { + background-position: 0 -512px +} + +.sbspray-Heart { + background-position: -128px -512px +} + +.sbspray-Hypixel { + background-position: -256px -512px +} + +.sbspray-HypixelDark { + background-position: -384px -512px +} + +.sbspray-IceCream { + background-position: -512px -512px +} + +.sbspray-Kite { + background-position: -640px -512px +} + +.sbspray-LetUsIn { + background-position: -768px -512px +} + +.sbspray-Lifebelt { + background-position: -896px -512px +} + +.sbspray-MinionAnimals { + background-position: -1024px -512px +} + +.sbspray-MinionFarming { + background-position: -1152px -512px +} + +.sbspray-MinionForaging { + background-position: 0 -640px +} + +.sbspray-MinionMining { + background-position: -128px -640px +} + +.sbspray-MinionMisc { + background-position: -256px -640px +} + +.sbspray-MinionMonsters { + background-position: -384px -640px +} + +.sbspray-OnFire { + background-position: -512px -640px +} + +.sbspray-Porkchop { + background-position: -640px -640px +} + +.sbspray-PortalArrowE { + background-position: -768px -640px +} + +.sbspray-PortalArrowN { + background-position: -896px -640px +} + +.sbspray-PortalArrowS { + background-position: -1024px -640px +} + +.sbspray-PortalArrowW { + background-position: -1152px -640px +} + +.sbspray-Presents { + background-position: 0 -768px +} + +.sbspray-Puffer { + background-position: -128px -768px +} + +.sbspray-PuppySurprise { + background-position: -256px -768px +} + +.sbspray-RabbitCostume { + background-position: -384px -768px +} + +.sbspray-RedArrowE { + background-position: -512px -768px +} + +.sbspray-RedArrowN { + background-position: -640px -768px +} + +.sbspray-RedArrowNE { + background-position: -768px -768px +} + +.sbspray-RedArrowNW { + background-position: -896px -768px +} + +.sbspray-RedArrowS { + background-position: -1024px -768px +} + +.sbspray-RedArrowSE { + background-position: -1152px -768px +} + +.sbspray-RedArrowSW { + background-position: 0 -896px +} + +.sbspray-RedArrowW { + background-position: -128px -896px +} + +.sbspray-SandCastleH { + background-position: -256px -896px +} + +.sbspray-Sandcastle { + background-position: -384px -896px +} + +.sbspray-SantaJerry { + background-position: -512px -896px +} + +.sbspray-SantaSlips { + background-position: -640px -896px +} + +.sbspray-Sign { + background-position: -768px -896px +} + +.sbspray-SkyBlockChristmas { + background-position: -896px -896px +} + +.sbspray-SniperSnowball { + background-position: -1024px -896px +} + +.sbspray-Snowball { + background-position: -1152px -896px +} + +.sbspray-StorageArrowE { + background-position: 0 -1024px +} + +.sbspray-StorageArrowN { + background-position: -128px -1024px +} + +.sbspray-StorageArrowS { + background-position: -256px -1024px +} + +.sbspray-StorageArrowW { + background-position: -384px -1024px +} + +.sbspray-Surfing { + background-position: -512px -1024px +} + +.sbspray-TheWrongEggs { + background-position: -640px -1024px +} + +.sbspray-Trap { + background-position: -768px -1024px +} + +.sbspray-TrickOrTreat { + background-position: -896px -1024px +} + +.sbspray-UndeadJerry { + background-position: -1024px -1024px +} + +.sbspray-Volleyball { + background-position: -1152px -1024px +} + +.sbspray-Watcher { + background-position: 0 -1152px +} + +.sbspray-Whoosh { + background-position: -128px -1152px +} + +.sbspray-WitchPlease { + background-position: -256px -1152px +} + +.sbspray-Wreath { + background-position: -384px -1152px +} + +.sbspray-YellowArrowE { + background-position: -512px -1152px +} + +.sbspray-YellowArrowN { + background-position: -640px -1152px +} + +.sbspray-YellowArrowNE { + background-position: -768px -1152px +} + +.sbspray-YellowArrowNW { + background-position: -896px -1152px +} + +.sbspray-YellowArrowS { + background-position: -1024px -1152px +} + +.sbspray-YellowArrowSE { + background-position: -1152px -1152px +} + +.sbspray-YellowArrowSW { + background-position: -1280px 0 +} + +.sbspray-YellowArrowW { + background-position: -1280px -128px +} + +.mcsprite-acacia_boat { + background-position: 0 0 +} + +.mcsprite-acacia_button { + background-position: -32px 0 +} + +.mcsprite-acacia_door { + background-position: -64px 0 +} + +.mcsprite-acacia_fence { + background-position: -96px 0 +} + +.mcsprite-acacia_fence_gate { + background-position: -128px 0 +} + +.mcsprite-acacia_leaves { + background-position: -160px 0 +} + +.mcsprite-acacia_log { + background-position: -192px 0 +} + +.mcsprite-acacia_planks { + background-position: -224px 0 +} + +.mcsprite-acacia_pressure_plate { + background-position: -256px 0 +} + +.mcsprite-acacia_sapling { + background-position: -288px 0 +} + +.mcsprite-acacia_sign { + background-position: -320px 0 +} + +.mcsprite-acacia_slab { + background-position: -352px 0 +} + +.mcsprite-acacia_stairs { + background-position: -384px 0 +} + +.mcsprite-acacia_trapdoor { + background-position: -416px 0 +} + +.mcsprite-acacia_wood { + background-position: -448px 0 +} + +.mcsprite-acacia_wood_button { + background-position: -480px 0 +} + +.mcsprite-acacia_wood_door { + background-position: -512px 0 +} + +.mcsprite-acacia_wood_fence { + background-position: -544px 0 +} + +.mcsprite-acacia_wood_fence_gate { + background-position: -576px 0 +} + +.mcsprite-acacia_wood_planks { + background-position: -608px 0 +} + +.mcsprite-acacia_wood_pressure_plate { + background-position: -640px 0 +} + +.mcsprite-acacia_wood_sign { + background-position: -672px 0 +} + +.mcsprite-acacia_wood_slab { + background-position: -704px 0 +} + +.mcsprite-acacia_wood_stairs { + background-position: -736px 0 +} + +.mcsprite-acacia_wood_trapdoor { + background-position: -768px 0 +} + +.mcsprite-activator_rail { + background-position: -800px 0 +} + +.mcsprite-adult_carrots { + background-position: -832px 0 +} + +.mcsprite-adult_nether_warts { + background-position: -864px 0 +} + +.mcsprite-adult_potatoes { + background-position: -896px 0 +} + +.mcsprite-adult_wheat_crops { + background-position: -928px 0 +} + +.mcsprite-air { + background-position: -960px 0 +} + +.mcsprite-allium { + background-position: -992px 0 +} + +.mcsprite-amethyst_cluster { + background-position: -1024px 0 +} + +.mcsprite-amethyst_shard { + background-position: -1056px 0 +} + +.mcsprite-ancient_debris { + background-position: -1088px 0 +} + +.mcsprite-andesite { + background-position: -1120px 0 +} + +.mcsprite-andesite_slab { + background-position: -1152px 0 +} + +.mcsprite-andesite_stairs { + background-position: -1184px 0 +} + +.mcsprite-andesite_wall { + background-position: -1216px 0 +} + +.mcsprite-anvil { + background-position: -1248px 0 +} + +.mcsprite-apple { + background-position: 0 -32px +} + +.mcsprite-armor_stand { + background-position: -32px -32px +} + +.mcsprite-arrow { + background-position: -64px -32px +} + +.mcsprite-arrow_loaded_crossbow { + background-position: -96px -32px +} + +.mcsprite-arrow_of_decay { + background-position: -128px -32px +} + +.mcsprite-arrow_of_fire_resistance { + background-position: -160px -32px +} + +.mcsprite-arrow_of_harming { + background-position: -192px -32px +} + +.mcsprite-arrow_of_healing { + background-position: -224px -32px +} + +.mcsprite-arrow_of_invisibility { + background-position: -256px -32px +} + +.mcsprite-arrow_of_leaping { + background-position: -288px -32px +} + +.mcsprite-arrow_of_luck { + background-position: -320px -32px +} + +.mcsprite-arrow_of_night_vision { + background-position: -352px -32px +} + +.mcsprite-arrow_of_poison { + background-position: -384px -32px +} + +.mcsprite-arrow_of_regeneration { + background-position: -416px -32px +} + +.mcsprite-arrow_of_slow_falling { + background-position: -448px -32px +} + +.mcsprite-arrow_of_slowness { + background-position: -480px -32px +} + +.mcsprite-arrow_of_splashing { + background-position: -512px -32px +} + +.mcsprite-arrow_of_strength { + background-position: -544px -32px +} + +.mcsprite-arrow_of_swiftness { + background-position: -576px -32px +} + +.mcsprite-arrow_of_the_turtle_master { + background-position: -608px -32px +} + +.mcsprite-arrow_of_water_breathing { + background-position: -640px -32px +} + +.mcsprite-arrow_of_weakness { + background-position: -672px -32px +} + +.mcsprite-awkward_lingering_potion { + background-position: -704px -32px +} + +.mcsprite-awkward_potion { + background-position: -736px -32px +} + +.mcsprite-awkward_splash_potion { + background-position: -768px -32px +} + +.mcsprite-axolotl_spawn_egg { + background-position: -800px -32px +} + +.mcsprite-azalea { + background-position: -832px -32px +} + +.mcsprite-azalea_leaves { + background-position: -864px -32px +} + +.mcsprite-azure_bluet { + background-position: -896px -32px +} + +.mcsprite-baked_potato { + background-position: -928px -32px +} + +.mcsprite-bamboo { + background-position: -960px -32px +} + +.mcsprite-banner { + background-position: -992px -32px +} + +.mcsprite-barrel { + background-position: -1024px -32px +} + +.mcsprite-barrier { + background-position: -1056px -32px +} + +.mcsprite-basalt { + background-position: -1088px -32px +} + +.mcsprite-bat_spawn_egg { + background-position: -1120px -32px +} + +.mcsprite-beacon { + background-position: -1152px -32px +} + +.mcsprite-bedrock { + background-position: -1184px -32px +} + +.mcsprite-bee_nest { + background-position: -1216px -32px +} + +.mcsprite-bee_spawn_egg { + background-position: -1248px -32px +} + +.mcsprite-beehive { + background-position: 0 -64px +} + +.mcsprite-beetroot { + background-position: -32px -64px +} + +.mcsprite-beetroot_seeds { + background-position: -64px -64px +} + +.mcsprite-beetroot_soup { + background-position: -96px -64px +} + +.mcsprite-beetroots { + background-position: -128px -64px +} + +.mcsprite-bell { + background-position: -160px -64px +} + +.mcsprite-big_dripleaf { + background-position: -192px -64px +} + +.mcsprite-birch_boat { + background-position: -224px -64px +} + +.mcsprite-birch_button { + background-position: -256px -64px +} + +.mcsprite-birch_door { + background-position: -288px -64px +} + +.mcsprite-birch_fence { + background-position: -320px -64px +} + +.mcsprite-birch_fence_gate { + background-position: -352px -64px +} + +.mcsprite-birch_leaves { + background-position: -384px -64px +} + +.mcsprite-birch_log { + background-position: -416px -64px +} + +.mcsprite-birch_planks { + background-position: -448px -64px +} + +.mcsprite-birch_pressure_plate { + background-position: -480px -64px +} + +.mcsprite-birch_sapling { + background-position: -512px -64px +} + +.mcsprite-birch_sign { + background-position: -544px -64px +} + +.mcsprite-birch_slab { + background-position: -576px -64px +} + +.mcsprite-birch_stairs { + background-position: -608px -64px +} + +.mcsprite-birch_trapdoor { + background-position: -640px -64px +} + +.mcsprite-birch_wood { + background-position: -672px -64px +} + +.mcsprite-birch_wood_button { + background-position: -704px -64px +} + +.mcsprite-birch_wood_door { + background-position: -736px -64px +} + +.mcsprite-birch_wood_fence { + background-position: -768px -64px +} + +.mcsprite-birch_wood_fence_gate { + background-position: -800px -64px +} + +.mcsprite-birch_wood_planks { + background-position: -832px -64px +} + +.mcsprite-birch_wood_pressure_plate { + background-position: -864px -64px +} + +.mcsprite-birch_wood_sign { + background-position: -896px -64px +} + +.mcsprite-birch_wood_slab { + background-position: -928px -64px +} + +.mcsprite-birch_wood_stairs { + background-position: -960px -64px +} + +.mcsprite-birch_wood_trapdoor { + background-position: -992px -64px +} + +.mcsprite-black_banner { + background-position: -1024px -64px +} + +.mcsprite-black_bed { + background-position: -1056px -64px +} + +.mcsprite-black_bed_lce { + background-position: -1088px -64px +} + +.mcsprite-black_candle { + background-position: -1120px -64px +} + +.mcsprite-black_carpet { + background-position: -1152px -64px +} + +.mcsprite-black_concrete { + background-position: -1184px -64px +} + +.mcsprite-black_concrete_powder { + background-position: -1216px -64px +} + +.mcsprite-black_dye { + background-position: -1248px -64px +} + +.mcsprite-black_firework_star { + background-position: 0 -96px +} + +.mcsprite-black_glazed_terracotta { + background-position: -32px -96px +} + +.mcsprite-black_shield { + background-position: -64px -96px +} + +.mcsprite-black_shulker_box { + background-position: -96px -96px +} + +.mcsprite-black_stained_glass { + background-position: -128px -96px +} + +.mcsprite-black_stained_glass_pane { + background-position: -160px -96px +} + +.mcsprite-black_terracotta { + background-position: -192px -96px +} + +.mcsprite-black_wool { + background-position: -224px -96px +} + +.mcsprite-blackstone { + background-position: -256px -96px +} + +.mcsprite-blackstone_slab { + background-position: -288px -96px +} + +.mcsprite-blackstone_stairs { + background-position: -320px -96px +} + +.mcsprite-blackstone_wall { + background-position: -352px -96px +} + +.mcsprite-blast_furnace { + background-position: -384px -96px +} + +.mcsprite-blaze_powder { + background-position: -416px -96px +} + +.mcsprite-blaze_rod { + background-position: -448px -96px +} + +.mcsprite-blaze_spawn_egg { + background-position: -480px -96px +} + +.mcsprite-block_of_amethyst { + background-position: -512px -96px +} + +.mcsprite-block_of_coal { + background-position: -544px -96px +} + +.mcsprite-block_of_copper { + background-position: -576px -96px +} + +.mcsprite-block_of_diamond { + background-position: -608px -96px +} + +.mcsprite-block_of_emerald { + background-position: -640px -96px +} + +.mcsprite-block_of_gold { + background-position: -672px -96px +} + +.mcsprite-block_of_iron { + background-position: -704px -96px +} + +.mcsprite-block_of_lapis_lazuli { + background-position: -736px -96px +} + +.mcsprite-block_of_netherite { + background-position: -768px -96px +} + +.mcsprite-block_of_quartz { + background-position: -800px -96px +} + +.mcsprite-block_of_raw_copper { + background-position: -832px -96px +} + +.mcsprite-block_of_raw_gold { + background-position: -864px -96px +} + +.mcsprite-block_of_raw_iron { + background-position: -896px -96px +} + +.mcsprite-block_of_redstone { + background-position: -928px -96px +} + +.mcsprite-blue_banner { + background-position: -960px -96px +} + +.mcsprite-blue_bed { + background-position: -992px -96px +} + +.mcsprite-blue_bed_lce { + background-position: -1024px -96px +} + +.mcsprite-blue_candle { + background-position: -1056px -96px +} + +.mcsprite-blue_carpet { + background-position: -1088px -96px +} + +.mcsprite-blue_concrete { + background-position: -1120px -96px +} + +.mcsprite-blue_concrete_powder { + background-position: -1152px -96px +} + +.mcsprite-blue_dye { + background-position: -1184px -96px +} + +.mcsprite-blue_firework_star { + background-position: -1216px -96px +} + +.mcsprite-blue_glazed_terracotta { + background-position: -1248px -96px +} + +.mcsprite-blue_ice { + background-position: 0 -128px +} + +.mcsprite-blue_orchid { + background-position: -32px -128px +} + +.mcsprite-blue_shield { + background-position: -64px -128px +} + +.mcsprite-blue_shulker_box { + background-position: -96px -128px +} + +.mcsprite-blue_stained_glass { + background-position: -128px -128px +} + +.mcsprite-blue_stained_glass_pane { + background-position: -160px -128px +} + +.mcsprite-blue_terracotta { + background-position: -192px -128px +} + +.mcsprite-blue_wool { + background-position: -224px -128px +} + +.mcsprite-bone { + background-position: -256px -128px +} + +.mcsprite-bone_block { + background-position: -288px -128px +} + +.mcsprite-bone_meal { + background-position: -320px -128px +} + +.mcsprite-book { + background-position: -352px -128px +} + +.mcsprite-book_and_quill { + background-position: -384px -128px +} + +.mcsprite-bookshelf { + background-position: -416px -128px +} + +.mcsprite-bottle_o_enchanting { + background-position: -448px -128px +} + +.mcsprite-bow { + background-position: -480px -128px +} + +.mcsprite-bowl { + background-position: -512px -128px +} + +.mcsprite-brain_coral { + background-position: -544px -128px +} + +.mcsprite-brain_coral_block { + background-position: -576px -128px +} + +.mcsprite-brain_coral_fan { + background-position: -608px -128px +} + +.mcsprite-bread { + background-position: -640px -128px +} + +.mcsprite-brewing_stand { + background-position: -672px -128px +} + +.mcsprite-brick { + background-position: -704px -128px +} + +.mcsprite-brick_slab { + background-position: -736px -128px +} + +.mcsprite-brick_slab_old { + background-position: -768px -128px +} + +.mcsprite-brick_stairs { + background-position: -800px -128px +} + +.mcsprite-brick_wall { + background-position: -832px -128px +} + +.mcsprite-bricks { + background-position: -864px -128px +} + +.mcsprite-bricks_old { + background-position: -896px -128px +} + +.mcsprite-broken_anvil { + background-position: -928px -128px +} + +.mcsprite-broken_elytra { + background-position: -960px -128px +} + +.mcsprite-brown_banner { + background-position: -992px -128px +} + +.mcsprite-brown_bed { + background-position: -1024px -128px +} + +.mcsprite-brown_bed_lce { + background-position: -1056px -128px +} + +.mcsprite-brown_candle { + background-position: -1088px -128px +} + +.mcsprite-brown_carpet { + background-position: -1120px -128px +} + +.mcsprite-brown_concrete { + background-position: -1152px -128px +} + +.mcsprite-brown_concrete_powder { + background-position: -1184px -128px +} + +.mcsprite-brown_dye { + background-position: -1216px -128px +} + +.mcsprite-brown_firework_star { + background-position: -1248px -128px +} + +.mcsprite-brown_glazed_terracotta { + background-position: 0 -160px +} + +.mcsprite-brown_mushroom { + background-position: -32px -160px +} + +.mcsprite-brown_mushroom_block { + background-position: -64px -160px +} + +.mcsprite-brown_shield { + background-position: -96px -160px +} + +.mcsprite-brown_shulker_box { + background-position: -128px -160px +} + +.mcsprite-brown_stained_glass { + background-position: -160px -160px +} + +.mcsprite-brown_stained_glass_pane { + background-position: -192px -160px +} + +.mcsprite-brown_terracotta { + background-position: -224px -160px +} + +.mcsprite-brown_wool { + background-position: -256px -160px +} + +.mcsprite-bubble_column { + background-position: -288px -160px +} + +.mcsprite-bubble_coral { + background-position: -320px -160px +} + +.mcsprite-bubble_coral_block { + background-position: -352px -160px +} + +.mcsprite-bubble_coral_fan { + background-position: -384px -160px +} + +.mcsprite-bucket { + background-position: -416px -160px +} + +.mcsprite-bucket_of_axolotl { + background-position: -448px -160px +} + +.mcsprite-bucket_of_cod { + background-position: -480px -160px +} + +.mcsprite-bucket_of_pufferfish { + background-position: -512px -160px +} + +.mcsprite-bucket_of_salmon { + background-position: -544px -160px +} + +.mcsprite-bucket_of_tropical_fish { + background-position: -576px -160px +} + +.mcsprite-budding_amethyst { + background-position: -608px -160px +} + +.mcsprite-bundle { + background-position: -640px -160px +} + +.mcsprite-buried_treasure_map { + background-position: -672px -160px +} + +.mcsprite-cactus { + background-position: -704px -160px +} + +.mcsprite-cactus_green { + background-position: -736px -160px +} + +.mcsprite-cake { + background-position: -768px -160px +} + +.mcsprite-calcite { + background-position: -800px -160px +} + +.mcsprite-campfire { + background-position: -832px -160px +} + +.mcsprite-candle { + background-position: -864px -160px +} + +.mcsprite-carrot { + background-position: -896px -160px +} + +.mcsprite-carrot_on_a_stick { + background-position: -928px -160px +} + +.mcsprite-cartography_table { + background-position: -960px -160px +} + +.mcsprite-carved_pumpkin { + background-position: -992px -160px +} + +.mcsprite-cast_fishing_rod { + background-position: -1024px -160px +} + +.mcsprite-cat_spawn_egg { + background-position: -1056px -160px +} + +.mcsprite-cauldron { + background-position: -1088px -160px +} + +.mcsprite-cave_air { + background-position: -1120px -160px +} + +.mcsprite-cave_spider_spawn_egg { + background-position: -1152px -160px +} + +.mcsprite-chain { + background-position: -1184px -160px +} + +.mcsprite-chainmail_boots { + background-position: -1216px -160px +} + +.mcsprite-chainmail_chestplate { + background-position: -1248px -160px +} + +.mcsprite-chainmail_helmet { + background-position: 0 -192px +} + +.mcsprite-chainmail_leggings { + background-position: -32px -192px +} + +.mcsprite-charcoal { + background-position: -64px -192px +} + +.mcsprite-chest { + background-position: -96px -192px +} + +.mcsprite-chicken_spawn_egg { + background-position: -128px -192px +} + +.mcsprite-chipped_anvil { + background-position: -160px -192px +} + +.mcsprite-chiseled_deepslate { + background-position: -192px -192px +} + +.mcsprite-chiseled_nether_bricks { + background-position: -224px -192px +} + +.mcsprite-chiseled_polished_blackstone { + background-position: -256px -192px +} + +.mcsprite-chiseled_quartz_block { + background-position: -288px -192px +} + +.mcsprite-chiseled_red_sandstone { + background-position: -320px -192px +} + +.mcsprite-chiseled_sandstone { + background-position: -352px -192px +} + +.mcsprite-chiseled_stone_bricks { + background-position: -384px -192px +} + +.mcsprite-chiseled_stone_bricks_monster_egg { + background-position: -416px -192px +} + +.mcsprite-chorus_flower { + background-position: -448px -192px +} + +.mcsprite-chorus_fruit { + background-position: -480px -192px +} + +.mcsprite-chorus_plant { + background-position: -512px -192px +} + +.mcsprite-clay { + background-position: -544px -192px +} + +.mcsprite-clay_ball { + background-position: -576px -192px +} + +.mcsprite-clock { + background-position: -608px -192px +} + +.mcsprite-clownfish { + background-position: -640px -192px +} + +.mcsprite-coal { + background-position: -672px -192px +} + +.mcsprite-coal_ore { + background-position: -704px -192px +} + +.mcsprite-coarse_dirt { + background-position: -736px -192px +} + +.mcsprite-cobbled_deepslate { + background-position: -768px -192px +} + +.mcsprite-cobbled_deepslate_slab { + background-position: -800px -192px +} + +.mcsprite-cobbled_deepslate_stairs { + background-position: -832px -192px +} + +.mcsprite-cobbled_deepslate_wall { + background-position: -864px -192px +} + +.mcsprite-cobblestone { + background-position: -896px -192px +} + +.mcsprite-cobblestone_monster_egg { + background-position: -928px -192px +} + +.mcsprite-cobblestone_slab { + background-position: -960px -192px +} + +.mcsprite-cobblestone_stairs { + background-position: -992px -192px +} + +.mcsprite-cobblestone_wall { + background-position: -1024px -192px +} + +.mcsprite-cobweb { + background-position: -1056px -192px +} + +.mcsprite-cocoa_beans { + background-position: -1088px -192px +} + +.mcsprite-cod_spawn_egg { + background-position: -1120px -192px +} + +.mcsprite-command_block { + background-position: -1152px -192px +} + +.mcsprite-compass { + background-position: -1184px -192px +} + +.mcsprite-composter { + background-position: -1216px -192px +} + +.mcsprite-conduit { + background-position: -1248px -192px +} + +.mcsprite-cooked_beef { + background-position: 0 -224px +} + +.mcsprite-cooked_chicken { + background-position: -32px -224px +} + +.mcsprite-cooked_cod { + background-position: -64px -224px +} + +.mcsprite-cooked_fish { + background-position: -96px -224px +} + +.mcsprite-cooked_mutton { + background-position: -128px -224px +} + +.mcsprite-cooked_porkchop { + background-position: -160px -224px +} + +.mcsprite-cooked_rabbit { + background-position: -192px -224px +} + +.mcsprite-cooked_salmon { + background-position: -224px -224px +} + +.mcsprite-cookie { + background-position: -256px -224px +} + +.mcsprite-copper_block { + background-position: -288px -224px +} + +.mcsprite-copper_ingot { + background-position: -320px -224px +} + +.mcsprite-copper_ore { + background-position: -352px -224px +} + +.mcsprite-cornflower { + background-position: -384px -224px +} + +.mcsprite-cow_spawn_egg { + background-position: -416px -224px +} + +.mcsprite-cracked_deepslate_bricks { + background-position: -448px -224px +} + +.mcsprite-cracked_deepslate_tiles { + background-position: -480px -224px +} + +.mcsprite-cracked_nether_bricks { + background-position: -512px -224px +} + +.mcsprite-cracked_polished_blackstone_bricks { + background-position: -544px -224px +} + +.mcsprite-cracked_stone_bricks { + background-position: -576px -224px +} + +.mcsprite-cracked_stone_bricks_monster_egg { + background-position: -608px -224px +} + +.mcsprite-crafting_table { + background-position: -640px -224px +} + +.mcsprite-creeper_head { + background-position: -672px -224px +} + +.mcsprite-creeper_spawn_egg { + background-position: -704px -224px +} + +.mcsprite-crimson_button { + background-position: -736px -224px +} + +.mcsprite-crimson_door { + background-position: -768px -224px +} + +.mcsprite-crimson_fence { + background-position: -800px -224px +} + +.mcsprite-crimson_fence_gate { + background-position: -832px -224px +} + +.mcsprite-crimson_fungus { + background-position: -864px -224px +} + +.mcsprite-crimson_hyphae { + background-position: -896px -224px +} + +.mcsprite-crimson_nylium { + background-position: -928px -224px +} + +.mcsprite-crimson_planks { + background-position: -960px -224px +} + +.mcsprite-crimson_pressure_plate { + background-position: -992px -224px +} + +.mcsprite-crimson_roots { + background-position: -1024px -224px +} + +.mcsprite-crimson_sign { + background-position: -1056px -224px +} + +.mcsprite-crimson_slab { + background-position: -1088px -224px +} + +.mcsprite-crimson_stairs { + background-position: -1120px -224px +} + +.mcsprite-crimson_stem { + background-position: -1152px -224px +} + +.mcsprite-crimson_trapdoor { + background-position: -1184px -224px +} + +.mcsprite-crossbow { + background-position: -1216px -224px +} + +.mcsprite-crying_obsidian { + background-position: -1248px -224px +} + +.mcsprite-cut_copper { + background-position: 0 -256px +} + +.mcsprite-cut_copper_block { + background-position: -32px -256px +} + +.mcsprite-cut_copper_slab { + background-position: -64px -256px +} + +.mcsprite-cut_copper_stairs { + background-position: -96px -256px +} + +.mcsprite-cut_red_sandstone { + background-position: -128px -256px +} + +.mcsprite-cut_red_sandstone_slab { + background-position: -160px -256px +} + +.mcsprite-cut_sandstone { + background-position: -192px -256px +} + +.mcsprite-cut_sandstone_slab { + background-position: -224px -256px +} + +.mcsprite-cyan_banner { + background-position: -256px -256px +} + +.mcsprite-cyan_bed { + background-position: -288px -256px +} + +.mcsprite-cyan_bed_lce { + background-position: -320px -256px +} + +.mcsprite-cyan_candle { + background-position: -352px -256px +} + +.mcsprite-cyan_carpet { + background-position: -384px -256px +} + +.mcsprite-cyan_concrete { + background-position: -416px -256px +} + +.mcsprite-cyan_concrete_powder { + background-position: -448px -256px +} + +.mcsprite-cyan_dye { + background-position: -480px -256px +} + +.mcsprite-cyan_firework_star { + background-position: -512px -256px +} + +.mcsprite-cyan_glazed_terracotta { + background-position: -544px -256px +} + +.mcsprite-cyan_shield { + background-position: -576px -256px +} + +.mcsprite-cyan_shulker_box { + background-position: -608px -256px +} + +.mcsprite-cyan_stained_glass { + background-position: -640px -256px +} + +.mcsprite-cyan_stained_glass_pane { + background-position: -672px -256px +} + +.mcsprite-cyan_terracotta { + background-position: -704px -256px +} + +.mcsprite-cyan_wool { + background-position: -736px -256px +} + +.mcsprite-dandelion { + background-position: -768px -256px +} + +.mcsprite-dandelion_yellow { + background-position: -800px -256px +} + +.mcsprite-dark_oak_boat { + background-position: -832px -256px +} + +.mcsprite-dark_oak_button { + background-position: -864px -256px +} + +.mcsprite-dark_oak_door { + background-position: -896px -256px +} + +.mcsprite-dark_oak_fence { + background-position: -928px -256px +} + +.mcsprite-dark_oak_fence_gate { + background-position: -960px -256px +} + +.mcsprite-dark_oak_leaves { + background-position: -992px -256px +} + +.mcsprite-dark_oak_log { + background-position: -1024px -256px +} + +.mcsprite-dark_oak_planks { + background-position: -1056px -256px +} + +.mcsprite-dark_oak_pressure_plate { + background-position: -1088px -256px +} + +.mcsprite-dark_oak_sapling { + background-position: -1120px -256px +} + +.mcsprite-dark_oak_sign { + background-position: -1152px -256px +} + +.mcsprite-dark_oak_slab { + background-position: -1184px -256px +} + +.mcsprite-dark_oak_stairs { + background-position: -1216px -256px +} + +.mcsprite-dark_oak_trapdoor { + background-position: -1248px -256px +} + +.mcsprite-dark_oak_wood { + background-position: 0 -288px +} + +.mcsprite-dark_oak_wood_button { + background-position: -32px -288px +} + +.mcsprite-dark_oak_wood_door { + background-position: -64px -288px +} + +.mcsprite-dark_oak_wood_fence { + background-position: -96px -288px +} + +.mcsprite-dark_oak_wood_fence_gate { + background-position: -128px -288px +} + +.mcsprite-dark_oak_wood_planks { + background-position: -160px -288px +} + +.mcsprite-dark_oak_wood_pressure_plate { + background-position: -192px -288px +} + +.mcsprite-dark_oak_wood_sign { + background-position: -224px -288px +} + +.mcsprite-dark_oak_wood_slab { + background-position: -256px -288px +} + +.mcsprite-dark_oak_wood_stairs { + background-position: -288px -288px +} + +.mcsprite-dark_oak_wood_trapdoor { + background-position: -320px -288px +} + +.mcsprite-dark_prismarine { + background-position: -352px -288px +} + +.mcsprite-dark_prismarine_slab { + background-position: -384px -288px +} + +.mcsprite-dark_prismarine_stairs { + background-position: -416px -288px +} + +.mcsprite-daylight_detector { + background-position: -448px -288px +} + +.mcsprite-daylight_sensor { + background-position: -480px -288px +} + +.mcsprite-dead_brain_coral { + background-position: -512px -288px +} + +.mcsprite-dead_brain_coral_block { + background-position: -544px -288px +} + +.mcsprite-dead_brain_coral_fan { + background-position: -576px -288px +} + +.mcsprite-dead_bubble_coral { + background-position: -608px -288px +} + +.mcsprite-dead_bubble_coral_block { + background-position: -640px -288px +} + +.mcsprite-dead_bubble_coral_fan { + background-position: -672px -288px +} + +.mcsprite-dead_bush { + background-position: -704px -288px +} + +.mcsprite-dead_fire_coral { + background-position: -736px -288px +} + +.mcsprite-dead_fire_coral_block { + background-position: -768px -288px +} + +.mcsprite-dead_fire_coral_fan { + background-position: -800px -288px +} + +.mcsprite-dead_horn_coral { + background-position: -832px -288px +} + +.mcsprite-dead_horn_coral_block { + background-position: -864px -288px +} + +.mcsprite-dead_horn_coral_fan { + background-position: -896px -288px +} + +.mcsprite-dead_tube_coral { + background-position: -928px -288px +} + +.mcsprite-dead_tube_coral_block { + background-position: -960px -288px +} + +.mcsprite-dead_tube_coral_fan { + background-position: -992px -288px +} + +.mcsprite-debug_stick { + background-position: -1024px -288px +} + +.mcsprite-deepslate { + background-position: -1056px -288px +} + +.mcsprite-deepslate_brick_slab { + background-position: -1088px -288px +} + +.mcsprite-deepslate_brick_stairs { + background-position: -1120px -288px +} + +.mcsprite-deepslate_brick_wall { + background-position: -1152px -288px +} + +.mcsprite-deepslate_bricks { + background-position: -1184px -288px +} + +.mcsprite-deepslate_coal_ore { + background-position: -1216px -288px +} + +.mcsprite-deepslate_copper_ore { + background-position: -1248px -288px +} + +.mcsprite-deepslate_diamond_ore { + background-position: 0 -320px +} + +.mcsprite-deepslate_emerald_ore { + background-position: -32px -320px +} + +.mcsprite-deepslate_gold_ore { + background-position: -64px -320px +} + +.mcsprite-deepslate_iron_ore { + background-position: -96px -320px +} + +.mcsprite-deepslate_lapis_lazuli_ore { + background-position: -128px -320px +} + +.mcsprite-deepslate_redstone_ore { + background-position: -160px -320px +} + +.mcsprite-deepslate_tile_slab { + background-position: -192px -320px +} + +.mcsprite-deepslate_tile_stairs { + background-position: -224px -320px +} + +.mcsprite-deepslate_tile_wall { + background-position: -256px -320px +} + +.mcsprite-deepslate_tiles { + background-position: -288px -320px +} + +.mcsprite-detector_rail { + background-position: -320px -320px +} + +.mcsprite-diamond { + background-position: -352px -320px +} + +.mcsprite-diamond_axe { + background-position: -384px -320px +} + +.mcsprite-diamond_boots { + background-position: -416px -320px +} + +.mcsprite-diamond_chestplate { + background-position: -448px -320px +} + +.mcsprite-diamond_helmet { + background-position: -480px -320px +} + +.mcsprite-diamond_hoe { + background-position: -512px -320px +} + +.mcsprite-diamond_horse_armor { + background-position: -544px -320px +} + +.mcsprite-diamond_leggings { + background-position: -576px -320px +} + +.mcsprite-diamond_ore { + background-position: -608px -320px +} + +.mcsprite-diamond_pickaxe { + background-position: -640px -320px +} + +.mcsprite-diamond_shovel { + background-position: -672px -320px +} + +.mcsprite-diamond_sword { + background-position: -704px -320px +} + +.mcsprite-diorite { + background-position: -736px -320px +} + +.mcsprite-diorite_slab { + background-position: -768px -320px +} + +.mcsprite-diorite_stairs { + background-position: -800px -320px +} + +.mcsprite-diorite_wall { + background-position: -832px -320px +} + +.mcsprite-dirt { + background-position: -864px -320px +} + +.mcsprite-dirt_path { + background-position: -896px -320px +} + +.mcsprite-dispenser { + background-position: -928px -320px +} + +.mcsprite-dolphin_spawn_egg { + background-position: -960px -320px +} + +.mcsprite-donkey_spawn_egg { + background-position: -992px -320px +} + +.mcsprite-double_smooth_stone_slab { + background-position: -1024px -320px +} + +.mcsprite-dragon_egg { + background-position: -1056px -320px +} + +.mcsprite-dragon_head { + background-position: -1088px -320px +} + +.mcsprite-dragons_breath { + background-position: -1120px -320px +} + +.mcsprite-dried_kelp { + background-position: -1152px -320px +} + +.mcsprite-dried_kelp_block { + background-position: -1184px -320px +} + +.mcsprite-dripstone_block { + background-position: -1216px -320px +} + +.mcsprite-dropper { + background-position: -1248px -320px +} + +.mcsprite-drowned_spawn_egg { + background-position: 0 -352px +} + +.mcsprite-egg { + background-position: -32px -352px +} + +.mcsprite-elder_guardian_spawn_egg { + background-position: -64px -352px +} + +.mcsprite-elytra { + background-position: -96px -352px +} + +.mcsprite-emerald { + background-position: -128px -352px +} + +.mcsprite-emerald_ore { + background-position: -160px -352px +} + +.mcsprite-empty_locator_map { + background-position: -192px -352px +} + +.mcsprite-empty_map { + background-position: -224px -352px +} + +.mcsprite-enchanted_apple { + background-position: -256px -352px +} + +.mcsprite-enchanted_book { + background-position: -288px -352px +} + +.mcsprite-enchanted_golden_apple { + background-position: -320px -352px +} + +.mcsprite-enchanting_table { + background-position: -352px -352px +} + +.mcsprite-enchantment_table { + background-position: -384px -352px +} + +.mcsprite-end_crystal { + background-position: -416px -352px +} + +.mcsprite-end_gateway { + background-position: -448px -352px +} + +.mcsprite-end_portal { + background-position: -480px -352px +} + +.mcsprite-end_portal_frame { + background-position: -512px -352px +} + +.mcsprite-end_rod { + background-position: -544px -352px +} + +.mcsprite-end_stone { + background-position: -576px -352px +} + +.mcsprite-end_stone_brick_slab { + background-position: -608px -352px +} + +.mcsprite-end_stone_brick_stairs { + background-position: -640px -352px +} + +.mcsprite-end_stone_brick_wall { + background-position: -672px -352px +} + +.mcsprite-end_stone_bricks { + background-position: -704px -352px +} + +.mcsprite-ender_chest { + background-position: -736px -352px +} + +.mcsprite-ender_pearl { + background-position: -768px -352px +} + +.mcsprite-enderman_spawn_egg { + background-position: -800px -352px +} + +.mcsprite-endermite_spawn_egg { + background-position: -832px -352px +} + +.mcsprite-evoker_spawn_egg { + background-position: -864px -352px +} + +.mcsprite-exposed_copper { + background-position: -896px -352px +} + +.mcsprite-exposed_copper_block { + background-position: -928px -352px +} + +.mcsprite-exposed_cut_copper { + background-position: -960px -352px +} + +.mcsprite-exposed_cut_copper_block { + background-position: -992px -352px +} + +.mcsprite-exposed_cut_copper_slab { + background-position: -1024px -352px +} + +.mcsprite-exposed_cut_copper_stairs { + background-position: -1056px -352px +} + +.mcsprite-eye_of_ender { + background-position: -1088px -352px +} + +.mcsprite-farmland { + background-position: -1120px -352px +} + +.mcsprite-feather { + background-position: -1152px -352px +} + +.mcsprite-fermented_spider_eye { + background-position: -1184px -352px +} + +.mcsprite-fern { + background-position: -1216px -352px +} + +.mcsprite-filled_bundle { + background-position: -1248px -352px +} + +.mcsprite-fire_charge { + background-position: 0 -384px +} + +.mcsprite-fire_coral { + background-position: -32px -384px +} + +.mcsprite-fire_coral_block { + background-position: -64px -384px +} + +.mcsprite-fire_coral_fan { + background-position: -96px -384px +} + +.mcsprite-firework_loaded_crossbow { + background-position: -128px -384px +} + +.mcsprite-firework_rocket { + background-position: -160px -384px +} + +.mcsprite-firework_star { + background-position: -192px -384px +} + +.mcsprite-fishing_rod { + background-position: -224px -384px +} + +.mcsprite-fletching_table { + background-position: -256px -384px +} + +.mcsprite-flint { + background-position: -288px -384px +} + +.mcsprite-flint_and_steel { + background-position: -320px -384px +} + +.mcsprite-flower_pot { + background-position: -352px -384px +} + +.mcsprite-flowering_azalea { + background-position: -384px -384px +} + +.mcsprite-flowering_azalea_leaves { + background-position: -416px -384px +} + +.mcsprite-flowing_lava { + background-position: -448px -384px +} + +.mcsprite-flowing_water { + background-position: -480px -384px +} + +.mcsprite-fox_spawn_egg { + background-position: -512px -384px +} + +.mcsprite-frosted_ice { + background-position: -544px -384px +} + +.mcsprite-furnace { + background-position: -576px -384px +} + +.mcsprite-ghast_spawn_egg { + background-position: -608px -384px +} + +.mcsprite-ghast_tear { + background-position: -640px -384px +} + +.mcsprite-gilded_blackstone { + background-position: -672px -384px +} + +.mcsprite-glass { + background-position: -704px -384px +} + +.mcsprite-glass_bottle { + background-position: -736px -384px +} + +.mcsprite-glass_pane { + background-position: -768px -384px +} + +.mcsprite-glistering_melon { + background-position: -800px -384px +} + +.mcsprite-glistering_melon_slice { + background-position: -832px -384px +} + +.mcsprite-glow_berries { + background-position: -864px -384px +} + +.mcsprite-glow_ink_sac { + background-position: -896px -384px +} + +.mcsprite-glow_item_frame { + background-position: -928px -384px +} + +.mcsprite-glow_lichen { + background-position: -960px -384px +} + +.mcsprite-glow_squid_spawn_egg { + background-position: -992px -384px +} + +.mcsprite-glowstone { + background-position: -1024px -384px +} + +.mcsprite-glowstone_dust { + background-position: -1056px -384px +} + +.mcsprite-goat_horn { + background-position: -1088px -384px +} + +.mcsprite-goat_spawn_egg { + background-position: -1120px -384px +} + +.mcsprite-gold_ingot { + background-position: -1152px -384px +} + +.mcsprite-gold_nugget { + background-position: -1184px -384px +} + +.mcsprite-gold_ore { + background-position: -1216px -384px +} + +.mcsprite-golden_apple { + background-position: -1248px -384px +} + +.mcsprite-golden_axe { + background-position: 0 -416px +} + +.mcsprite-golden_boots { + background-position: -32px -416px +} + +.mcsprite-golden_carrot { + background-position: -64px -416px +} + +.mcsprite-golden_chestplate { + background-position: -96px -416px +} + +.mcsprite-golden_helmet { + background-position: -128px -416px +} + +.mcsprite-golden_hoe { + background-position: -160px -416px +} + +.mcsprite-golden_horse_armor { + background-position: -192px -416px +} + +.mcsprite-golden_leggings { + background-position: -224px -416px +} + +.mcsprite-golden_pickaxe { + background-position: -256px -416px +} + +.mcsprite-golden_shovel { + background-position: -288px -416px +} + +.mcsprite-golden_sword { + background-position: -320px -416px +} + +.mcsprite-granite { + background-position: -352px -416px +} + +.mcsprite-granite_slab { + background-position: -384px -416px +} + +.mcsprite-granite_stairs { + background-position: -416px -416px +} + +.mcsprite-granite_wall { + background-position: -448px -416px +} + +.mcsprite-grass { + background-position: -480px -416px +} + +.mcsprite-grass_block { + background-position: -512px -416px +} + +.mcsprite-grass_path { + background-position: -544px -416px +} + +.mcsprite-gravel { + background-position: -576px -416px +} + +.mcsprite-gray_banner { + background-position: -608px -416px +} + +.mcsprite-gray_bed { + background-position: -640px -416px +} + +.mcsprite-gray_bed_lce { + background-position: -672px -416px +} + +.mcsprite-gray_candle { + background-position: -704px -416px +} + +.mcsprite-gray_carpet { + background-position: -736px -416px +} + +.mcsprite-gray_concrete { + background-position: -768px -416px +} + +.mcsprite-gray_concrete_powder { + background-position: -800px -416px +} + +.mcsprite-gray_dye { + background-position: -832px -416px +} + +.mcsprite-gray_firework_star { + background-position: -864px -416px +} + +.mcsprite-gray_glazed_terracotta { + background-position: -896px -416px +} + +.mcsprite-gray_shield { + background-position: -928px -416px +} + +.mcsprite-gray_shulker_box { + background-position: -960px -416px +} + +.mcsprite-gray_stained_glass { + background-position: -992px -416px +} + +.mcsprite-gray_stained_glass_pane { + background-position: -1024px -416px +} + +.mcsprite-gray_terracotta { + background-position: -1056px -416px +} + +.mcsprite-gray_wool { + background-position: -1088px -416px +} + +.mcsprite-green_banner { + background-position: -1120px -416px +} + +.mcsprite-green_bed { + background-position: -1152px -416px +} + +.mcsprite-green_bed_lce { + background-position: -1184px -416px +} + +.mcsprite-green_candle { + background-position: -1216px -416px +} + +.mcsprite-green_carpet { + background-position: -1248px -416px +} + +.mcsprite-green_concrete { + background-position: 0 -448px +} + +.mcsprite-green_concrete_powder { + background-position: -32px -448px +} + +.mcsprite-green_dye { + background-position: -64px -448px +} + +.mcsprite-green_firework_star { + background-position: -96px -448px +} + +.mcsprite-green_glazed_terracotta { + background-position: -128px -448px +} + +.mcsprite-green_shield { + background-position: -160px -448px +} + +.mcsprite-green_shulker_box { + background-position: -192px -448px +} + +.mcsprite-green_stained_glass { + background-position: -224px -448px +} + +.mcsprite-green_stained_glass_pane { + background-position: -256px -448px +} + +.mcsprite-green_terracotta { + background-position: -288px -448px +} + +.mcsprite-green_wool { + background-position: -320px -448px +} + +.mcsprite-grindstone { + background-position: -352px -448px +} + +.mcsprite-guardian_spawn_egg { + background-position: -384px -448px +} + +.mcsprite-gunpowder { + background-position: -416px -448px +} + +.mcsprite-half_filled_bundle { + background-position: -448px -448px +} + +.mcsprite-hanging_roots { + background-position: -480px -448px +} + +.mcsprite-hay_bale { + background-position: -512px -448px +} + +.mcsprite-head { + background-position: -544px -448px +} + +.mcsprite-heart_of_the_sea { + background-position: -576px -448px +} + +.mcsprite-heavy_weighted_pressure_plate { + background-position: -608px -448px +} + +.mcsprite-hoglin_spawn_egg { + background-position: -640px -448px +} + +.mcsprite-honey_block { + background-position: -672px -448px +} + +.mcsprite-honey_bottle { + background-position: -704px -448px +} + +.mcsprite-honeycomb { + background-position: -736px -448px +} + +.mcsprite-honeycomb_block { + background-position: -768px -448px +} + +.mcsprite-hopper { + background-position: -800px -448px +} + +.mcsprite-horn_coral { + background-position: -832px -448px +} + +.mcsprite-horn_coral_block { + background-position: -864px -448px +} + +.mcsprite-horn_coral_fan { + background-position: -896px -448px +} + +.mcsprite-horse_spawn_egg { + background-position: -928px -448px +} + +.mcsprite-husk_spawn_egg { + background-position: -960px -448px +} + +.mcsprite-ice { + background-position: -992px -448px +} + +.mcsprite-infested_chiseled_stone_bricks { + background-position: -1024px -448px +} + +.mcsprite-infested_cobblestone { + background-position: -1056px -448px +} + +.mcsprite-infested_cracked_stone_bricks { + background-position: -1088px -448px +} + +.mcsprite-infested_deepslate { + background-position: -1120px -448px +} + +.mcsprite-infested_mossy_stone_bricks { + background-position: -1152px -448px +} + +.mcsprite-infested_stone { + background-position: -1184px -448px +} + +.mcsprite-infested_stone_bricks { + background-position: -1216px -448px +} + +.mcsprite-ink_sac { + background-position: -1248px -448px +} + +.mcsprite-inverted_daylight_detector { + background-position: 0 -480px +} + +.mcsprite-inverted_daylight_sensor { + background-position: -32px -480px +} + +.mcsprite-invisible_bedrock { + background-position: -64px -480px +} + +.mcsprite-iron_axe { + background-position: -96px -480px +} + +.mcsprite-iron_bars { + background-position: -128px -480px +} + +.mcsprite-iron_boots { + background-position: -160px -480px +} + +.mcsprite-iron_chestplate { + background-position: -192px -480px +} + +.mcsprite-iron_door { + background-position: -224px -480px +} + +.mcsprite-iron_helmet { + background-position: -256px -480px +} + +.mcsprite-iron_hoe { + background-position: -288px -480px +} + +.mcsprite-iron_horse_armor { + background-position: -320px -480px +} + +.mcsprite-iron_ingot { + background-position: -352px -480px +} + +.mcsprite-iron_leggings { + background-position: -384px -480px +} + +.mcsprite-iron_nugget { + background-position: -416px -480px +} + +.mcsprite-iron_ore { + background-position: -448px -480px +} + +.mcsprite-iron_pickaxe { + background-position: -480px -480px +} + +.mcsprite-iron_shovel { + background-position: -512px -480px +} + +.mcsprite-iron_sword { + background-position: -544px -480px +} + +.mcsprite-iron_trapdoor { + background-position: -576px -480px +} + +.mcsprite-item_frame { + background-position: -608px -480px +} + +.mcsprite-jack_olantern { + background-position: -640px -480px +} + +.mcsprite-jigsaw { + background-position: -672px -480px +} + +.mcsprite-jigsaw_block { + background-position: -704px -480px +} + +.mcsprite-jukebox { + background-position: -736px -480px +} + +.mcsprite-jungle_boat { + background-position: -768px -480px +} + +.mcsprite-jungle_button { + background-position: -800px -480px +} + +.mcsprite-jungle_door { + background-position: -832px -480px +} + +.mcsprite-jungle_fence { + background-position: -864px -480px +} + +.mcsprite-jungle_fence_gate { + background-position: -896px -480px +} + +.mcsprite-jungle_leaves { + background-position: -928px -480px +} + +.mcsprite-jungle_log { + background-position: -960px -480px +} + +.mcsprite-jungle_planks { + background-position: -992px -480px +} + +.mcsprite-jungle_pressure_plate { + background-position: -1024px -480px +} + +.mcsprite-jungle_sapling { + background-position: -1056px -480px +} + +.mcsprite-jungle_sign { + background-position: -1088px -480px +} + +.mcsprite-jungle_slab { + background-position: -1120px -480px +} + +.mcsprite-jungle_stairs { + background-position: -1152px -480px +} + +.mcsprite-jungle_trapdoor { + background-position: -1184px -480px +} + +.mcsprite-jungle_wood { + background-position: -1216px -480px +} + +.mcsprite-jungle_wood_button { + background-position: -1248px -480px +} + +.mcsprite-jungle_wood_door { + background-position: 0 -512px +} + +.mcsprite-jungle_wood_fence { + background-position: -32px -512px +} + +.mcsprite-jungle_wood_fence_gate { + background-position: -64px -512px +} + +.mcsprite-jungle_wood_planks { + background-position: -96px -512px +} + +.mcsprite-jungle_wood_pressure_plate { + background-position: -128px -512px +} + +.mcsprite-jungle_wood_sign { + background-position: -160px -512px +} + +.mcsprite-jungle_wood_slab { + background-position: -192px -512px +} + +.mcsprite-jungle_wood_stairs { + background-position: -224px -512px +} + +.mcsprite-jungle_wood_trapdoor { + background-position: -256px -512px +} + +.mcsprite-kelp { + background-position: -288px -512px +} + +.mcsprite-knowledge_book { + background-position: -320px -512px +} + +.mcsprite-ladder { + background-position: -352px -512px +} + +.mcsprite-lantern { + background-position: -384px -512px +} + +.mcsprite-lapis_lazuli { + background-position: -416px -512px +} + +.mcsprite-lapis_lazuli_block { + background-position: -448px -512px +} + +.mcsprite-lapis_lazuli_ore { + background-position: -480px -512px +} + +.mcsprite-large_amethyst_bud { + background-position: -512px -512px +} + +.mcsprite-large_fern { + background-position: -544px -512px +} + +.mcsprite-lava { + background-position: -576px -512px +} + +.mcsprite-lava_bucket { + background-position: -608px -512px +} + +.mcsprite-lead { + background-position: -640px -512px +} + +.mcsprite-leather { + background-position: -672px -512px +} + +.mcsprite-leather_boots { + background-position: -704px -512px +} + +.mcsprite-leather_boots_black { + background-position: -736px -512px +} + +.mcsprite-leather_boots_blue { + background-position: -768px -512px +} + +.mcsprite-leather_boots_cyan { + background-position: -800px -512px +} + +.mcsprite-leather_boots_gray { + background-position: -832px -512px +} + +.mcsprite-leather_boots_green { + background-position: -864px -512px +} + +.mcsprite-leather_boots_light_blue { + background-position: -896px -512px +} + +.mcsprite-leather_boots_light_gray { + background-position: -928px -512px +} + +.mcsprite-leather_boots_lime { + background-position: -960px -512px +} + +.mcsprite-leather_boots_magenta { + background-position: -992px -512px +} + +.mcsprite-leather_boots_orange { + background-position: -1024px -512px +} + +.mcsprite-leather_boots_pink { + background-position: -1056px -512px +} + +.mcsprite-leather_boots_purple { + background-position: -1088px -512px +} + +.mcsprite-leather_boots_red { + background-position: -1120px -512px +} + +.mcsprite-leather_boots_white { + background-position: -1152px -512px +} + +.mcsprite-leather_boots_yellow { + background-position: -1184px -512px +} + +.mcsprite-leather_cap { + background-position: -1216px -512px +} + +.mcsprite-leather_cap_black { + background-position: -1248px -512px +} + +.mcsprite-leather_cap_blue { + background-position: 0 -544px +} + +.mcsprite-leather_cap_cyan { + background-position: -32px -544px +} + +.mcsprite-leather_cap_gray { + background-position: -64px -544px +} + +.mcsprite-leather_cap_green { + background-position: -96px -544px +} + +.mcsprite-leather_cap_light_blue { + background-position: -128px -544px +} + +.mcsprite-leather_cap_light_gray { + background-position: -160px -544px +} + +.mcsprite-leather_cap_lime { + background-position: -192px -544px +} + +.mcsprite-leather_cap_magenta { + background-position: -224px -544px +} + +.mcsprite-leather_cap_orange { + background-position: -256px -544px +} + +.mcsprite-leather_cap_pink { + background-position: -288px -544px +} + +.mcsprite-leather_cap_purple { + background-position: -320px -544px +} + +.mcsprite-leather_cap_red { + background-position: -352px -544px +} + +.mcsprite-leather_cap_white { + background-position: -384px -544px +} + +.mcsprite-leather_cap_yellow { + background-position: -416px -544px +} + +.mcsprite-leather_horse_armor { + background-position: -448px -544px +} + +.mcsprite-leather_pants { + background-position: -480px -544px +} + +.mcsprite-leather_pants_black { + background-position: -512px -544px +} + +.mcsprite-leather_pants_blue { + background-position: -544px -544px +} + +.mcsprite-leather_pants_cyan { + background-position: -576px -544px +} + +.mcsprite-leather_pants_gray { + background-position: -608px -544px +} + +.mcsprite-leather_pants_green { + background-position: -640px -544px +} + +.mcsprite-leather_pants_light_blue { + background-position: -672px -544px +} + +.mcsprite-leather_pants_light_gray { + background-position: -704px -544px +} + +.mcsprite-leather_pants_lime { + background-position: -736px -544px +} + +.mcsprite-leather_pants_magenta { + background-position: -768px -544px +} + +.mcsprite-leather_pants_orange { + background-position: -800px -544px +} + +.mcsprite-leather_pants_pink { + background-position: -832px -544px +} + +.mcsprite-leather_pants_purple { + background-position: -864px -544px +} + +.mcsprite-leather_pants_red { + background-position: -896px -544px +} + +.mcsprite-leather_pants_white { + background-position: -928px -544px +} + +.mcsprite-leather_pants_yellow { + background-position: -960px -544px +} + +.mcsprite-leather_tunic { + background-position: -992px -544px +} + +.mcsprite-leather_tunic_black { + background-position: -1024px -544px +} + +.mcsprite-leather_tunic_blue { + background-position: -1056px -544px +} + +.mcsprite-leather_tunic_cyan { + background-position: -1088px -544px +} + +.mcsprite-leather_tunic_gray { + background-position: -1120px -544px +} + +.mcsprite-leather_tunic_green { + background-position: -1152px -544px +} + +.mcsprite-leather_tunic_light_blue { + background-position: -1184px -544px +} + +.mcsprite-leather_tunic_light_gray { + background-position: -1216px -544px +} + +.mcsprite-leather_tunic_lime { + background-position: -1248px -544px +} + +.mcsprite-leather_tunic_magenta { + background-position: 0 -576px +} + +.mcsprite-leather_tunic_orange { + background-position: -32px -576px +} + +.mcsprite-leather_tunic_pink { + background-position: -64px -576px +} + +.mcsprite-leather_tunic_purple { + background-position: -96px -576px +} + +.mcsprite-leather_tunic_red { + background-position: -128px -576px +} + +.mcsprite-leather_tunic_white { + background-position: -160px -576px +} + +.mcsprite-leather_tunic_yellow { + background-position: -192px -576px +} + +.mcsprite-lectern { + background-position: -224px -576px +} + +.mcsprite-lever { + background-position: -256px -576px +} + +.mcsprite-light_blue_banner { + background-position: -288px -576px +} + +.mcsprite-light_blue_bed { + background-position: -320px -576px +} + +.mcsprite-light_blue_bed_lce { + background-position: -352px -576px +} + +.mcsprite-light_blue_candle { + background-position: -384px -576px +} + +.mcsprite-light_blue_carpet { + background-position: -416px -576px +} + +.mcsprite-light_blue_concrete { + background-position: -448px -576px +} + +.mcsprite-light_blue_concrete_powder { + background-position: -480px -576px +} + +.mcsprite-light_blue_dye { + background-position: -512px -576px +} + +.mcsprite-light_blue_firework_star { + background-position: -544px -576px +} + +.mcsprite-light_blue_glazed_terracotta { + background-position: -576px -576px +} + +.mcsprite-light_blue_shield { + background-position: -608px -576px +} + +.mcsprite-light_blue_shulker_box { + background-position: -640px -576px +} + +.mcsprite-light_blue_stained_glass { + background-position: -672px -576px +} + +.mcsprite-light_blue_stained_glass_pane { + background-position: -704px -576px +} + +.mcsprite-light_blue_terracotta { + background-position: -736px -576px +} + +.mcsprite-light_blue_wool { + background-position: -768px -576px +} + +.mcsprite-light_gray_banner { + background-position: -800px -576px +} + +.mcsprite-light_gray_bed { + background-position: -832px -576px +} + +.mcsprite-light_gray_bed_lce { + background-position: -864px -576px +} + +.mcsprite-light_gray_candle { + background-position: -896px -576px +} + +.mcsprite-light_gray_carpet { + background-position: -928px -576px +} + +.mcsprite-light_gray_concrete { + background-position: -960px -576px +} + +.mcsprite-light_gray_concrete_powder { + background-position: -992px -576px +} + +.mcsprite-light_gray_dye { + background-position: -1024px -576px +} + +.mcsprite-light_gray_firework_star { + background-position: -1056px -576px +} + +.mcsprite-light_gray_glazed_terracotta { + background-position: -1088px -576px +} + +.mcsprite-light_gray_shield { + background-position: -1120px -576px +} + +.mcsprite-light_gray_shulker_box { + background-position: -1152px -576px +} + +.mcsprite-light_gray_stained_glass { + background-position: -1184px -576px +} + +.mcsprite-light_gray_stained_glass_pane { + background-position: -1216px -576px +} + +.mcsprite-light_gray_terracotta { + background-position: -1248px -576px +} + +.mcsprite-light_gray_wool { + background-position: 0 -608px +} + +.mcsprite-light_negative { + background-position: -32px -608px +} + +.mcsprite-light_weighted_pressure_plate { + background-position: -64px -608px +} + +.mcsprite-lightning_rod { + background-position: -96px -608px +} + +.mcsprite-lilac { + background-position: -128px -608px +} + +.mcsprite-lily_of_the_valley { + background-position: -160px -608px +} + +.mcsprite-lily_pad { + background-position: -192px -608px +} + +.mcsprite-lime_banner { + background-position: -224px -608px +} + +.mcsprite-lime_bed { + background-position: -256px -608px +} + +.mcsprite-lime_bed_lce { + background-position: -288px -608px +} + +.mcsprite-lime_candle { + background-position: -320px -608px +} + +.mcsprite-lime_carpet { + background-position: -352px -608px +} + +.mcsprite-lime_concrete { + background-position: -384px -608px +} + +.mcsprite-lime_concrete_powder { + background-position: -416px -608px +} + +.mcsprite-lime_dye { + background-position: -448px -608px +} + +.mcsprite-lime_firework_star { + background-position: -480px -608px +} + +.mcsprite-lime_glazed_terracotta { + background-position: -512px -608px +} + +.mcsprite-lime_shield { + background-position: -544px -608px +} + +.mcsprite-lime_shulker_box { + background-position: -576px -608px +} + +.mcsprite-lime_stained_glass { + background-position: -608px -608px +} + +.mcsprite-lime_stained_glass_pane { + background-position: -640px -608px +} + +.mcsprite-lime_terracotta { + background-position: -672px -608px +} + +.mcsprite-lime_wool { + background-position: -704px -608px +} + +.mcsprite-lingering_potion_of_decay { + background-position: -736px -608px +} + +.mcsprite-lingering_potion_of_fire_resistance { + background-position: -768px -608px +} + +.mcsprite-lingering_potion_of_harming { + background-position: -800px -608px +} + +.mcsprite-lingering_potion_of_healing { + background-position: -832px -608px +} + +.mcsprite-lingering_potion_of_invisibility { + background-position: -864px -608px +} + +.mcsprite-lingering_potion_of_leaping { + background-position: -896px -608px +} + +.mcsprite-lingering_potion_of_levitation { + background-position: -928px -608px +} + +.mcsprite-lingering_potion_of_luck { + background-position: -960px -608px +} + +.mcsprite-lingering_potion_of_night_vision { + background-position: -992px -608px +} + +.mcsprite-lingering_potion_of_poison { + background-position: -1024px -608px +} + +.mcsprite-lingering_potion_of_regeneration { + background-position: -1056px -608px +} + +.mcsprite-lingering_potion_of_slow_falling { + background-position: -1088px -608px +} + +.mcsprite-lingering_potion_of_slowness { + background-position: -1120px -608px +} + +.mcsprite-lingering_potion_of_strength { + background-position: -1152px -608px +} + +.mcsprite-lingering_potion_of_swiftness { + background-position: -1184px -608px +} + +.mcsprite-lingering_potion_of_the_turtle_master { + background-position: -1216px -608px +} + +.mcsprite-lingering_potion_of_water_breathing { + background-position: -1248px -608px +} + +.mcsprite-lingering_potion_of_weakness { + background-position: 0 -640px +} + +.mcsprite-lingering_water_bottle { + background-position: -32px -640px +} + +.mcsprite-llama_spawn_egg { + background-position: -64px -640px +} + +.mcsprite-locked_map { + background-position: -96px -640px +} + +.mcsprite-lodestone { + background-position: -128px -640px +} + +.mcsprite-loom { + background-position: -160px -640px +} + +.mcsprite-magenta_banner { + background-position: -192px -640px +} + +.mcsprite-magenta_bed { + background-position: -224px -640px +} + +.mcsprite-magenta_bed_lce { + background-position: -256px -640px +} + +.mcsprite-magenta_candle { + background-position: -288px -640px +} + +.mcsprite-magenta_carpet { + background-position: -320px -640px +} + +.mcsprite-magenta_concrete { + background-position: -352px -640px +} + +.mcsprite-magenta_concrete_powder { + background-position: -384px -640px +} + +.mcsprite-magenta_dye { + background-position: -416px -640px +} + +.mcsprite-magenta_firework_star { + background-position: -448px -640px +} + +.mcsprite-magenta_glazed_terracotta { + background-position: -480px -640px +} + +.mcsprite-magenta_shield { + background-position: -512px -640px +} + +.mcsprite-magenta_shulker_box { + background-position: -544px -640px +} + +.mcsprite-magenta_stained_glass { + background-position: -576px -640px +} + +.mcsprite-magenta_stained_glass_pane { + background-position: -608px -640px +} + +.mcsprite-magenta_terracotta { + background-position: -640px -640px +} + +.mcsprite-magenta_wool { + background-position: -672px -640px +} + +.mcsprite-magma_cream { + background-position: -704px -640px +} + +.mcsprite-magma_cube_spawn_egg { + background-position: -736px -640px +} + +.mcsprite-map { + background-position: -768px -640px +} + +.mcsprite-medium_amethyst_bud { + background-position: -800px -640px +} + +.mcsprite-melon { + background-position: -832px -640px +} + +.mcsprite-melon_seeds { + background-position: -864px -640px +} + +.mcsprite-melon_slice { + background-position: -896px -640px +} + +.mcsprite-mhf_alex { + background-position: -928px -640px +} + +.mcsprite-mhf_arrowdown { + background-position: -960px -640px +} + +.mcsprite-mhf_arrowleft { + background-position: -992px -640px +} + +.mcsprite-mhf_arrowright { + background-position: -1024px -640px +} + +.mcsprite-mhf_arrowup { + background-position: -1056px -640px +} + +.mcsprite-mhf_blaze { + background-position: -1088px -640px +} + +.mcsprite-mhf_cactus { + background-position: -1120px -640px +} + +.mcsprite-mhf_cake { + background-position: -1152px -640px +} + +.mcsprite-mhf_cavespider { + background-position: -1184px -640px +} + +.mcsprite-mhf_chest { + background-position: -1216px -640px +} + +.mcsprite-mhf_chicken { + background-position: -1248px -640px +} + +.mcsprite-mhf_coconutb { + background-position: 0 -672px +} + +.mcsprite-mhf_coconutg { + background-position: -32px -672px +} + +.mcsprite-mhf_cow { + background-position: -64px -672px +} + +.mcsprite-mhf_creeper { + background-position: -96px -672px +} + +.mcsprite-mhf_enderman { + background-position: -128px -672px +} + +.mcsprite-mhf_exclamation { + background-position: -160px -672px +} + +.mcsprite-mhf_ghast { + background-position: -192px -672px +} + +.mcsprite-mhf_golem { + background-position: -224px -672px +} + +.mcsprite-mhf_herobrine { + background-position: -256px -672px +} + +.mcsprite-mhf_lavaslime { + background-position: -288px -672px +} + +.mcsprite-mhf_melon { + background-position: -320px -672px +} + +.mcsprite-mhf_mushroomcow { + background-position: -352px -672px +} + +.mcsprite-mhf_oaklog { + background-position: -384px -672px +} + +.mcsprite-mhf_ocelot { + background-position: -416px -672px +} + +.mcsprite-mhf_pig { + background-position: -448px -672px +} + +.mcsprite-mhf_pigzombie { + background-position: -480px -672px +} + +.mcsprite-mhf_present1 { + background-position: -512px -672px +} + +.mcsprite-mhf_present2 { + background-position: -544px -672px +} + +.mcsprite-mhf_pumpkin { + background-position: -576px -672px +} + +.mcsprite-mhf_question { + background-position: -608px -672px +} + +.mcsprite-mhf_sheep { + background-position: -640px -672px +} + +.mcsprite-mhf_skeleton { + background-position: -672px -672px +} + +.mcsprite-mhf_slime { + background-position: -704px -672px +} + +.mcsprite-mhf_spider { + background-position: -736px -672px +} + +.mcsprite-mhf_squid { + background-position: -768px -672px +} + +.mcsprite-mhf_steve { + background-position: -800px -672px +} + +.mcsprite-mhf_tnt { + background-position: -832px -672px +} + +.mcsprite-mhf_tnt2 { + background-position: -864px -672px +} + +.mcsprite-mhf_villager { + background-position: -896px -672px +} + +.mcsprite-mhf_wskeleton { + background-position: -928px -672px +} + +.mcsprite-mhf_zombie { + background-position: -960px -672px +} + +.mcsprite-milk_bucket { + background-position: -992px -672px +} + +.mcsprite-minecart { + background-position: -1024px -672px +} + +.mcsprite-minecart_with_chest { + background-position: -1056px -672px +} + +.mcsprite-minecart_with_command_block { + background-position: -1088px -672px +} + +.mcsprite-minecart_with_furnace { + background-position: -1120px -672px +} + +.mcsprite-minecart_with_hopper { + background-position: -1152px -672px +} + +.mcsprite-minecart_with_tnt { + background-position: -1184px -672px +} + +.mcsprite-monster_spawner { + background-position: -1216px -672px +} + +.mcsprite-mooshroom_spawn_egg { + background-position: -1248px -672px +} + +.mcsprite-moss_block { + background-position: 0 -704px +} + +.mcsprite-moss_carpet { + background-position: -32px -704px +} + +.mcsprite-moss_stone { + background-position: -64px -704px +} + +.mcsprite-mossy_cobblestone { + background-position: -96px -704px +} + +.mcsprite-mossy_cobblestone_slab { + background-position: -128px -704px +} + +.mcsprite-mossy_cobblestone_stairs { + background-position: -160px -704px +} + +.mcsprite-mossy_cobblestone_wall { + background-position: -192px -704px +} + +.mcsprite-mossy_stone_brick_slab { + background-position: -224px -704px +} + +.mcsprite-mossy_stone_brick_stairs { + background-position: -256px -704px +} + +.mcsprite-mossy_stone_brick_wall { + background-position: -288px -704px +} + +.mcsprite-mossy_stone_bricks { + background-position: -320px -704px +} + +.mcsprite-mossy_stone_bricks_monster_egg { + background-position: -352px -704px +} + +.mcsprite-mule_spawn_egg { + background-position: -384px -704px +} + +.mcsprite-mundane_lingering_potion { + background-position: -416px -704px +} + +.mcsprite-mundane_potion { + background-position: -448px -704px +} + +.mcsprite-mundane_splash_potion { + background-position: -480px -704px +} + +.mcsprite-mushroom_stem { + background-position: -512px -704px +} + +.mcsprite-mushroom_stew { + background-position: -544px -704px +} + +.mcsprite-music_disc_11 { + background-position: -576px -704px +} + +.mcsprite-music_disc_13 { + background-position: -608px -704px +} + +.mcsprite-music_disc_blocks { + background-position: -640px -704px +} + +.mcsprite-music_disc_cat { + background-position: -672px -704px +} + +.mcsprite-music_disc_chirp { + background-position: -704px -704px +} + +.mcsprite-music_disc_far { + background-position: -736px -704px +} + +.mcsprite-music_disc_mall { + background-position: -768px -704px +} + +.mcsprite-music_disc_mellohi { + background-position: -800px -704px +} + +.mcsprite-music_disc_pigstep { + background-position: -832px -704px +} + +.mcsprite-music_disc_stal { + background-position: -864px -704px +} + +.mcsprite-music_disc_strad { + background-position: -896px -704px +} + +.mcsprite-music_disc_wait { + background-position: -928px -704px +} + +.mcsprite-music_disc_ward { + background-position: -960px -704px +} + +.mcsprite-mycelium { + background-position: -992px -704px +} + +.mcsprite-name_tag { + background-position: -1024px -704px +} + +.mcsprite-nautilus_shell { + background-position: -1056px -704px +} + +.mcsprite-nether_brick { + background-position: -1088px -704px +} + +.mcsprite-nether_brick_block { + background-position: -1120px -704px +} + +.mcsprite-nether_brick_fence { + background-position: -1152px -704px +} + +.mcsprite-nether_brick_slab { + background-position: -1184px -704px +} + +.mcsprite-nether_brick_stairs { + background-position: -1216px -704px +} + +.mcsprite-nether_brick_wall { + background-position: -1248px -704px +} + +.mcsprite-nether_bricks { + background-position: 0 -736px +} + +.mcsprite-nether_gold_ore { + background-position: -32px -736px +} + +.mcsprite-nether_quartz { + background-position: -64px -736px +} + +.mcsprite-nether_quartz_ore { + background-position: -96px -736px +} + +.mcsprite-nether_sprouts { + background-position: -128px -736px +} + +.mcsprite-nether_sprouts_old { + background-position: -160px -736px +} + +.mcsprite-nether_star { + background-position: -192px -736px +} + +.mcsprite-nether_wart { + background-position: -224px -736px +} + +.mcsprite-nether_wart_block { + background-position: -256px -736px +} + +.mcsprite-netherite_axe { + background-position: -288px -736px +} + +.mcsprite-netherite_boots { + background-position: -320px -736px +} + +.mcsprite-netherite_chestplate { + background-position: -352px -736px +} + +.mcsprite-netherite_helmet { + background-position: -384px -736px +} + +.mcsprite-netherite_hoe { + background-position: -416px -736px +} + +.mcsprite-netherite_ingot { + background-position: -448px -736px +} + +.mcsprite-netherite_leggings { + background-position: -480px -736px +} + +.mcsprite-netherite_pickaxe { + background-position: -512px -736px +} + +.mcsprite-netherite_scrap { + background-position: -544px -736px +} + +.mcsprite-netherite_shovel { + background-position: -576px -736px +} + +.mcsprite-netherite_sword { + background-position: -608px -736px +} + +.mcsprite-netherrack { + background-position: -640px -736px +} + +.mcsprite-note_block { + background-position: -672px -736px +} + +.mcsprite-oak_boat { + background-position: -704px -736px +} + +.mcsprite-oak_button { + background-position: -736px -736px +} + +.mcsprite-oak_door { + background-position: -768px -736px +} + +.mcsprite-oak_fence { + background-position: -800px -736px +} + +.mcsprite-oak_fence_gate { + background-position: -832px -736px +} + +.mcsprite-oak_leaves { + background-position: -864px -736px +} + +.mcsprite-oak_log { + background-position: -896px -736px +} + +.mcsprite-oak_planks { + background-position: -928px -736px +} + +.mcsprite-oak_pressure_plate { + background-position: -960px -736px +} + +.mcsprite-oak_sapling { + background-position: -992px -736px +} + +.mcsprite-oak_sign { + background-position: -1024px -736px +} + +.mcsprite-oak_slab { + background-position: -1056px -736px +} + +.mcsprite-oak_stairs { + background-position: -1088px -736px +} + +.mcsprite-oak_trapdoor { + background-position: -1120px -736px +} + +.mcsprite-oak_wood { + background-position: -1152px -736px +} + +.mcsprite-oak_wood_button { + background-position: -1184px -736px +} + +.mcsprite-oak_wood_door { + background-position: -1216px -736px +} + +.mcsprite-oak_wood_fence { + background-position: -1248px -736px +} + +.mcsprite-oak_wood_fence_gate { + background-position: 0 -768px +} + +.mcsprite-oak_wood_planks { + background-position: -32px -768px +} + +.mcsprite-oak_wood_pressure_plate { + background-position: -64px -768px +} + +.mcsprite-oak_wood_sign { + background-position: -96px -768px +} + +.mcsprite-oak_wood_slab { + background-position: -128px -768px +} + +.mcsprite-oak_wood_stairs { + background-position: -160px -768px +} + +.mcsprite-oak_wood_trapdoor { + background-position: -192px -768px +} + +.mcsprite-observer { + background-position: -224px -768px +} + +.mcsprite-obsidian { + background-position: -256px -768px +} + +.mcsprite-ocean_explorer_map { + background-position: -288px -768px +} + +.mcsprite-ocelot_spawn_egg { + background-position: -320px -768px +} + +.mcsprite-ominous_shield { + background-position: -352px -768px +} + +.mcsprite-orange_banner { + background-position: -384px -768px +} + +.mcsprite-orange_bed { + background-position: -416px -768px +} + +.mcsprite-orange_bed_lce { + background-position: -448px -768px +} + +.mcsprite-orange_candle { + background-position: -480px -768px +} + +.mcsprite-orange_carpet { + background-position: -512px -768px +} + +.mcsprite-orange_concrete { + background-position: -544px -768px +} + +.mcsprite-orange_concrete_powder { + background-position: -576px -768px +} + +.mcsprite-orange_dye { + background-position: -608px -768px +} + +.mcsprite-orange_firework_star { + background-position: -640px -768px +} + +.mcsprite-orange_glazed_terracotta { + background-position: -672px -768px +} + +.mcsprite-orange_shield { + background-position: -704px -768px +} + +.mcsprite-orange_shulker_box { + background-position: -736px -768px +} + +.mcsprite-orange_stained_glass { + background-position: -768px -768px +} + +.mcsprite-orange_stained_glass_pane { + background-position: -800px -768px +} + +.mcsprite-orange_terracotta { + background-position: -832px -768px +} + +.mcsprite-orange_tulip { + background-position: -864px -768px +} + +.mcsprite-orange_wool { + background-position: -896px -768px +} + +.mcsprite-oxeye_daisy { + background-position: -928px -768px +} + +.mcsprite-oxidized_copper { + background-position: -960px -768px +} + +.mcsprite-oxidized_copper_block { + background-position: -992px -768px +} + +.mcsprite-oxidized_cut_copper { + background-position: -1024px -768px +} + +.mcsprite-oxidized_cut_copper_block { + background-position: -1056px -768px +} + +.mcsprite-oxidized_cut_copper_slab { + background-position: -1088px -768px +} + +.mcsprite-oxidized_cut_copper_stairs { + background-position: -1120px -768px +} + +.mcsprite-packed_ice { + background-position: -1152px -768px +} + +.mcsprite-painting { + background-position: -1184px -768px +} + +.mcsprite-panda_spawn_egg { + background-position: -1216px -768px +} + +.mcsprite-paper { + background-position: -1248px -768px +} + +.mcsprite-parrot_spawn_egg { + background-position: 0 -800px +} + +.mcsprite-peony { + background-position: -32px -800px +} + +.mcsprite-petrified_oak_slab { + background-position: -64px -800px +} + +.mcsprite-phantom_membrane { + background-position: -96px -800px +} + +.mcsprite-phantom_spawn_egg { + background-position: -128px -800px +} + +.mcsprite-pig_spawn_egg { + background-position: -160px -800px +} + +.mcsprite-piglin_brute_spawn_egg { + background-position: -192px -800px +} + +.mcsprite-piglin_spawn_egg { + background-position: -224px -800px +} + +.mcsprite-pillager_spawn_egg { + background-position: -256px -800px +} + +.mcsprite-pink_banner { + background-position: -288px -800px +} + +.mcsprite-pink_bed { + background-position: -320px -800px +} + +.mcsprite-pink_bed_lce { + background-position: -352px -800px +} + +.mcsprite-pink_candle { + background-position: -384px -800px +} + +.mcsprite-pink_carpet { + background-position: -416px -800px +} + +.mcsprite-pink_concrete { + background-position: -448px -800px +} + +.mcsprite-pink_concrete_powder { + background-position: -480px -800px +} + +.mcsprite-pink_dye { + background-position: -512px -800px +} + +.mcsprite-pink_firework_star { + background-position: -544px -800px +} + +.mcsprite-pink_glazed_terracotta { + background-position: -576px -800px +} + +.mcsprite-pink_shield { + background-position: -608px -800px +} + +.mcsprite-pink_shulker_box { + background-position: -640px -800px +} + +.mcsprite-pink_stained_glass { + background-position: -672px -800px +} + +.mcsprite-pink_stained_glass_pane { + background-position: -704px -800px +} + +.mcsprite-pink_terracotta { + background-position: -736px -800px +} + +.mcsprite-pink_tulip { + background-position: -768px -800px +} + +.mcsprite-pink_wool { + background-position: -800px -800px +} + +.mcsprite-piston { + background-position: -832px -800px +} + +.mcsprite-player_head { + background-position: -864px -800px +} + +.mcsprite-podzol { + background-position: -896px -800px +} + +.mcsprite-pointed_dripstone { + background-position: -928px -800px +} + +.mcsprite-poisonous_potato { + background-position: -960px -800px +} + +.mcsprite-polar_bear_spawn_egg { + background-position: -992px -800px +} + +.mcsprite-polished_andesite { + background-position: -1024px -800px +} + +.mcsprite-polished_andesite_slab { + background-position: -1056px -800px +} + +.mcsprite-polished_andesite_stairs { + background-position: -1088px -800px +} + +.mcsprite-polished_basalt { + background-position: -1120px -800px +} + +.mcsprite-polished_blackstone { + background-position: -1152px -800px +} + +.mcsprite-polished_blackstone_brick_slab { + background-position: -1184px -800px +} + +.mcsprite-polished_blackstone_brick_stairs { + background-position: -1216px -800px +} + +.mcsprite-polished_blackstone_brick_wall { + background-position: -1248px -800px +} + +.mcsprite-polished_blackstone_bricks { + background-position: 0 -832px +} + +.mcsprite-polished_blackstone_button { + background-position: -32px -832px +} + +.mcsprite-polished_blackstone_pressure_plate { + background-position: -64px -832px +} + +.mcsprite-polished_blackstone_slab { + background-position: -96px -832px +} + +.mcsprite-polished_blackstone_stairs { + background-position: -128px -832px +} + +.mcsprite-polished_blackstone_wall { + background-position: -160px -832px +} + +.mcsprite-polished_deepslate { + background-position: -192px -832px +} + +.mcsprite-polished_deepslate_slab { + background-position: -224px -832px +} + +.mcsprite-polished_deepslate_stairs { + background-position: -256px -832px +} + +.mcsprite-polished_deepslate_wall { + background-position: -288px -832px +} + +.mcsprite-polished_diorite { + background-position: -320px -832px +} + +.mcsprite-polished_diorite_slab { + background-position: -352px -832px +} + +.mcsprite-polished_diorite_stairs { + background-position: -384px -832px +} + +.mcsprite-polished_granite { + background-position: -416px -832px +} + +.mcsprite-polished_granite_slab { + background-position: -448px -832px +} + +.mcsprite-polished_granite_stairs { + background-position: -480px -832px +} + +.mcsprite-popped_chorus_fruit { + background-position: -512px -832px +} + +.mcsprite-poppy { + background-position: -544px -832px +} + +.mcsprite-portal { + background-position: -576px -832px +} + +.mcsprite-potato { + background-position: -608px -832px +} + +.mcsprite-potion_of_decay { + background-position: -640px -832px +} + +.mcsprite-potion_of_fire_resistance { + background-position: -672px -832px +} + +.mcsprite-potion_of_harming { + background-position: -704px -832px +} + +.mcsprite-potion_of_healing { + background-position: -736px -832px +} + +.mcsprite-potion_of_invisibility { + background-position: -768px -832px +} + +.mcsprite-potion_of_leaping { + background-position: -800px -832px +} + +.mcsprite-potion_of_levitation { + background-position: -832px -832px +} + +.mcsprite-potion_of_luck { + background-position: -864px -832px +} + +.mcsprite-potion_of_night_vision { + background-position: -896px -832px +} + +.mcsprite-potion_of_poison { + background-position: -928px -832px +} + +.mcsprite-potion_of_regeneration { + background-position: -960px -832px +} + +.mcsprite-potion_of_slow_falling { + background-position: -992px -832px +} + +.mcsprite-potion_of_slowness { + background-position: -1024px -832px +} + +.mcsprite-potion_of_strength { + background-position: -1056px -832px +} + +.mcsprite-potion_of_swiftness { + background-position: -1088px -832px +} + +.mcsprite-potion_of_the_turtle_master { + background-position: -1120px -832px +} + +.mcsprite-potion_of_water_breathing { + background-position: -1152px -832px +} + +.mcsprite-potion_of_weakness { + background-position: -1184px -832px +} + +.mcsprite-powder_snow { + background-position: -1216px -832px +} + +.mcsprite-powder_snow_bucket { + background-position: -1248px -832px +} + +.mcsprite-powered_rail { + background-position: 0 -864px +} + +.mcsprite-prismarine { + background-position: -32px -864px +} + +.mcsprite-prismarine_brick_slab { + background-position: -64px -864px +} + +.mcsprite-prismarine_brick_stairs { + background-position: -96px -864px +} + +.mcsprite-prismarine_brick_stairs_old { + background-position: -128px -864px +} + +.mcsprite-prismarine_bricks { + background-position: -160px -864px +} + +.mcsprite-prismarine_bricks_slab { + background-position: -192px -864px +} + +.mcsprite-prismarine_crystals { + background-position: -224px -864px +} + +.mcsprite-prismarine_shard { + background-position: -256px -864px +} + +.mcsprite-prismarine_wall { + background-position: -288px -864px +} + +.mcsprite-pufferfish { + background-position: -320px -864px +} + +.mcsprite-pufferfish_spawn_egg { + background-position: -352px -864px +} + +.mcsprite-pumpkin { + background-position: -384px -864px +} + +.mcsprite-pumpkin_pie { + background-position: -416px -864px +} + +.mcsprite-pumpkin_seeds { + background-position: -448px -864px +} + +.mcsprite-purple_banner { + background-position: -480px -864px +} + +.mcsprite-purple_bed { + background-position: -512px -864px +} + +.mcsprite-purple_bed_lce { + background-position: -544px -864px +} + +.mcsprite-purple_candle { + background-position: -576px -864px +} + +.mcsprite-purple_carpet { + background-position: -608px -864px +} + +.mcsprite-purple_concrete { + background-position: -640px -864px +} + +.mcsprite-purple_concrete_powder { + background-position: -672px -864px +} + +.mcsprite-purple_dye { + background-position: -704px -864px +} + +.mcsprite-purple_firework_star { + background-position: -736px -864px +} + +.mcsprite-purple_glazed_terracotta { + background-position: -768px -864px +} + +.mcsprite-purple_shield { + background-position: -800px -864px +} + +.mcsprite-purple_shulker_box { + background-position: -832px -864px +} + +.mcsprite-purple_stained_glass { + background-position: -864px -864px +} + +.mcsprite-purple_stained_glass_pane { + background-position: -896px -864px +} + +.mcsprite-purple_terracotta { + background-position: -928px -864px +} + +.mcsprite-purple_wool { + background-position: -960px -864px +} + +.mcsprite-purpur_block { + background-position: -992px -864px +} + +.mcsprite-purpur_pillar { + background-position: -1024px -864px +} + +.mcsprite-purpur_slab { + background-position: -1056px -864px +} + +.mcsprite-purpur_stairs { + background-position: -1088px -864px +} + +.mcsprite-quartz_bricks { + background-position: -1120px -864px +} + +.mcsprite-quartz_pillar { + background-position: -1152px -864px +} + +.mcsprite-quartz_slab { + background-position: -1184px -864px +} + +.mcsprite-quartz_stairs { + background-position: -1216px -864px +} + +.mcsprite-rabbit_hide { + background-position: -1248px -864px +} + +.mcsprite-rabbit_spawn_egg { + background-position: 0 -896px +} + +.mcsprite-rabbit_stew { + background-position: -32px -896px +} + +.mcsprite-rabbits_foot { + background-position: -64px -896px +} + +.mcsprite-rail { + background-position: -96px -896px +} + +.mcsprite-ravager_spawn_egg { + background-position: -128px -896px +} + +.mcsprite-raw_beef { + background-position: -160px -896px +} + +.mcsprite-raw_chicken { + background-position: -192px -896px +} + +.mcsprite-raw_cod { + background-position: -224px -896px +} + +.mcsprite-raw_copper { + background-position: -256px -896px +} + +.mcsprite-raw_fish { + background-position: -288px -896px +} + +.mcsprite-raw_gold { + background-position: -320px -896px +} + +.mcsprite-raw_iron { + background-position: -352px -896px +} + +.mcsprite-raw_mutton { + background-position: -384px -896px +} + +.mcsprite-raw_porkchop { + background-position: -416px -896px +} + +.mcsprite-raw_rabbit { + background-position: -448px -896px +} + +.mcsprite-raw_salmon { + background-position: -480px -896px +} + +.mcsprite-red_banner { + background-position: -512px -896px +} + +.mcsprite-red_bed { + background-position: -544px -896px +} + +.mcsprite-red_bed_lce { + background-position: -576px -896px +} + +.mcsprite-red_candle { + background-position: -608px -896px +} + +.mcsprite-red_carpet { + background-position: -640px -896px +} + +.mcsprite-red_concrete { + background-position: -672px -896px +} + +.mcsprite-red_concrete_powder { + background-position: -704px -896px +} + +.mcsprite-red_dye { + background-position: -736px -896px +} + +.mcsprite-red_firework_star { + background-position: -768px -896px +} + +.mcsprite-red_glazed_terracotta { + background-position: -800px -896px +} + +.mcsprite-red_mushroom { + background-position: -832px -896px +} + +.mcsprite-red_mushroom_block { + background-position: -864px -896px +} + +.mcsprite-red_nether_brick_slab { + background-position: -896px -896px +} + +.mcsprite-red_nether_brick_stairs { + background-position: -928px -896px +} + +.mcsprite-red_nether_brick_wall { + background-position: -960px -896px +} + +.mcsprite-red_nether_bricks { + background-position: -992px -896px +} + +.mcsprite-red_sand { + background-position: -1024px -896px +} + +.mcsprite-red_sandstone { + background-position: -1056px -896px +} + +.mcsprite-red_sandstone_slab { + background-position: -1088px -896px +} + +.mcsprite-red_sandstone_stairs { + background-position: -1120px -896px +} + +.mcsprite-red_sandstone_wall { + background-position: -1152px -896px +} + +.mcsprite-red_shield { + background-position: -1184px -896px +} + +.mcsprite-red_shulker_box { + background-position: -1216px -896px +} + +.mcsprite-red_stained_glass { + background-position: -1248px -896px +} + +.mcsprite-red_stained_glass_pane { + background-position: 0 -928px +} + +.mcsprite-red_terracotta { + background-position: -32px -928px +} + +.mcsprite-red_tulip { + background-position: -64px -928px +} + +.mcsprite-red_wool { + background-position: -96px -928px +} + +.mcsprite-redstone { + background-position: -128px -928px +} + +.mcsprite-redstone_comparator { + background-position: -160px -928px +} + +.mcsprite-redstone_dust { + background-position: -192px -928px +} + +.mcsprite-redstone_lamp { + background-position: -224px -928px +} + +.mcsprite-redstone_ore { + background-position: -256px -928px +} + +.mcsprite-redstone_repeater { + background-position: -288px -928px +} + +.mcsprite-redstone_torch { + background-position: -320px -928px +} + +.mcsprite-respawn_anchor { + background-position: -352px -928px +} + +.mcsprite-rooted_dirt { + background-position: -384px -928px +} + +.mcsprite-rose_bush { + background-position: -416px -928px +} + +.mcsprite-rose_red { + background-position: -448px -928px +} + +.mcsprite-rotten_flesh { + background-position: -480px -928px +} + +.mcsprite-saddle { + background-position: -512px -928px +} + +.mcsprite-salmon_spawn_egg { + background-position: -544px -928px +} + +.mcsprite-sand { + background-position: -576px -928px +} + +.mcsprite-sandstone { + background-position: -608px -928px +} + +.mcsprite-sandstone_slab { + background-position: -640px -928px +} + +.mcsprite-sandstone_stairs { + background-position: -672px -928px +} + +.mcsprite-sandstone_wall { + background-position: -704px -928px +} + +.mcsprite-scaffolding { + background-position: -736px -928px +} + +.mcsprite-sculk_sensor { + background-position: -768px -928px +} + +.mcsprite-scute { + background-position: -800px -928px +} + +.mcsprite-sea_lantern { + background-position: -832px -928px +} + +.mcsprite-sea_pickle { + background-position: -864px -928px +} + +.mcsprite-seagrass { + background-position: -896px -928px +} + +.mcsprite-seeds { + background-position: -928px -928px +} + +.mcsprite-shears { + background-position: -960px -928px +} + +.mcsprite-sheep_spawn_egg { + background-position: -992px -928px +} + +.mcsprite-shield { + background-position: -1024px -928px +} + +.mcsprite-shroomlight { + background-position: -1056px -928px +} + +.mcsprite-shrub_lce { + background-position: -1088px -928px +} + +.mcsprite-shulker_box { + background-position: -1120px -928px +} + +.mcsprite-shulker_shell { + background-position: -1152px -928px +} + +.mcsprite-shulker_spawn_egg { + background-position: -1184px -928px +} + +.mcsprite-silverfish_spawn_egg { + background-position: -1216px -928px +} + +.mcsprite-skeleton_horse_spawn_egg { + background-position: -1248px -928px +} + +.mcsprite-skeleton_skull { + background-position: 0 -960px +} + +.mcsprite-skeleton_spawn_egg { + background-position: -32px -960px +} + +.mcsprite-slime_block { + background-position: -64px -960px +} + +.mcsprite-slime_spawn_egg { + background-position: -96px -960px +} + +.mcsprite-slimeball { + background-position: -128px -960px +} + +.mcsprite-small_amethyst_bud { + background-position: -160px -960px +} + +.mcsprite-small_dripleaf { + background-position: -192px -960px +} + +.mcsprite-smithing_table { + background-position: -224px -960px +} + +.mcsprite-smoker { + background-position: -256px -960px +} + +.mcsprite-smooth_basalt { + background-position: -288px -960px +} + +.mcsprite-smooth_quartz { + background-position: -320px -960px +} + +.mcsprite-smooth_quartz_block { + background-position: -352px -960px +} + +.mcsprite-smooth_quartz_slab { + background-position: -384px -960px +} + +.mcsprite-smooth_quartz_stairs { + background-position: -416px -960px +} + +.mcsprite-smooth_red_sandstone { + background-position: -448px -960px +} + +.mcsprite-smooth_red_sandstone_slab { + background-position: -480px -960px +} + +.mcsprite-smooth_red_sandstone_stairs { + background-position: -512px -960px +} + +.mcsprite-smooth_sandstone { + background-position: -544px -960px +} + +.mcsprite-smooth_sandstone_slab { + background-position: -576px -960px +} + +.mcsprite-smooth_sandstone_stairs { + background-position: -608px -960px +} + +.mcsprite-smooth_stone { + background-position: -640px -960px +} + +.mcsprite-smooth_stone_bricks { + background-position: -672px -960px +} + +.mcsprite-smooth_stone_slab { + background-position: -704px -960px +} + +.mcsprite-snow { + background-position: -736px -960px +} + +.mcsprite-snow_block { + background-position: -768px -960px +} + +.mcsprite-snowball { + background-position: -800px -960px +} + +.mcsprite-soul_campfire { + background-position: -832px -960px +} + +.mcsprite-soul_lantern { + background-position: -864px -960px +} + +.mcsprite-soul_sand { + background-position: -896px -960px +} + +.mcsprite-soul_soil { + background-position: -928px -960px +} + +.mcsprite-soul_torch { + background-position: -960px -960px +} + +.mcsprite-spawn_agent { + background-position: -992px -960px +} + +.mcsprite-spawn_bat { + background-position: -1024px -960px +} + +.mcsprite-spawn_bee { + background-position: -1056px -960px +} + +.mcsprite-spawn_blaze { + background-position: -1088px -960px +} + +.mcsprite-spawn_cat { + background-position: -1120px -960px +} + +.mcsprite-spawn_cave_spider { + background-position: -1152px -960px +} + +.mcsprite-spawn_chicken { + background-position: -1184px -960px +} + +.mcsprite-spawn_cod { + background-position: -1216px -960px +} + +.mcsprite-spawn_cow { + background-position: -1248px -960px +} + +.mcsprite-spawn_creeper { + background-position: 0 -992px +} + +.mcsprite-spawn_dolphin { + background-position: -32px -992px +} + +.mcsprite-spawn_donkey { + background-position: -64px -992px +} + +.mcsprite-spawn_drowned { + background-position: -96px -992px +} + +.mcsprite-spawn_elder_guardian { + background-position: -128px -992px +} + +.mcsprite-spawn_enderman { + background-position: -160px -992px +} + +.mcsprite-spawn_endermite { + background-position: -192px -992px +} + +.mcsprite-spawn_evoker { + background-position: -224px -992px +} + +.mcsprite-spawn_fox { + background-position: -256px -992px +} + +.mcsprite-spawn_ghast { + background-position: -288px -992px +} + +.mcsprite-spawn_goat { + background-position: -320px -992px +} + +.mcsprite-spawn_guardian { + background-position: -352px -992px +} + +.mcsprite-spawn_horse { + background-position: -384px -992px +} + +.mcsprite-spawn_husk { + background-position: -416px -992px +} + +.mcsprite-spawn_llama { + background-position: -448px -992px +} + +.mcsprite-spawn_magma_cube { + background-position: -480px -992px +} + +.mcsprite-spawn_mask { + background-position: -512px -992px +} + +.mcsprite-spawn_mooshroom { + background-position: -544px -992px +} + +.mcsprite-spawn_mule { + background-position: -576px -992px +} + +.mcsprite-spawn_npc { + background-position: -608px -992px +} + +.mcsprite-spawn_ocelot { + background-position: -640px -992px +} + +.mcsprite-spawn_panda { + background-position: -672px -992px +} + +.mcsprite-spawn_parrot { + background-position: -704px -992px +} + +.mcsprite-spawn_phantom { + background-position: -736px -992px +} + +.mcsprite-spawn_pig { + background-position: -768px -992px +} + +.mcsprite-spawn_pillager { + background-position: -800px -992px +} + +.mcsprite-spawn_polar_bear { + background-position: -832px -992px +} + +.mcsprite-spawn_pufferfish { + background-position: -864px -992px +} + +.mcsprite-spawn_rabbit { + background-position: -896px -992px +} + +.mcsprite-spawn_ravager { + background-position: -928px -992px +} + +.mcsprite-spawn_salmon { + background-position: -960px -992px +} + +.mcsprite-spawn_sheep { + background-position: -992px -992px +} + +.mcsprite-spawn_shulker { + background-position: -1024px -992px +} + +.mcsprite-spawn_silverfish { + background-position: -1056px -992px +} + +.mcsprite-spawn_skeleton { + background-position: -1088px -992px +} + +.mcsprite-spawn_skeleton_horse { + background-position: -1120px -992px +} + +.mcsprite-spawn_slime { + background-position: -1152px -992px +} + +.mcsprite-spawn_spider { + background-position: -1184px -992px +} + +.mcsprite-spawn_squid { + background-position: -1216px -992px +} + +.mcsprite-spawn_stray { + background-position: -1248px -992px +} + +.mcsprite-spawn_strider { + background-position: 0 -1024px +} + +.mcsprite-spawn_trader_llama { + background-position: -32px -1024px +} + +.mcsprite-spawn_tropical_fish { + background-position: -64px -1024px +} + +.mcsprite-spawn_turtle { + background-position: -96px -1024px +} + +.mcsprite-spawn_vex { + background-position: -128px -1024px +} + +.mcsprite-spawn_villager { + background-position: -160px -1024px +} + +.mcsprite-spawn_vindicator { + background-position: -192px -1024px +} + +.mcsprite-spawn_wandering_trader { + background-position: -224px -1024px +} + +.mcsprite-spawn_witch { + background-position: -256px -1024px +} + +.mcsprite-spawn_wither_skeleton { + background-position: -288px -1024px +} + +.mcsprite-spawn_wolf { + background-position: -320px -1024px +} + +.mcsprite-spawn_zoglin { + background-position: -352px -1024px +} + +.mcsprite-spawn_zombie { + background-position: -384px -1024px +} + +.mcsprite-spawn_zombie_horse { + background-position: -416px -1024px +} + +.mcsprite-spawn_zombie_pigman { + background-position: -448px -1024px +} + +.mcsprite-spawn_zombie_villager { + background-position: -480px -1024px +} + +.mcsprite-spawner { + background-position: -512px -1024px +} + +.mcsprite-spectral_arrow { + background-position: -544px -1024px +} + +.mcsprite-spider_eye { + background-position: -576px -1024px +} + +.mcsprite-spider_spawn_egg { + background-position: -608px -1024px +} + +.mcsprite-splash_mundane_potion { + background-position: -640px -1024px +} + +.mcsprite-splash_potion_of_decay { + background-position: -672px -1024px +} + +.mcsprite-splash_potion_of_fire_resistance { + background-position: -704px -1024px +} + +.mcsprite-splash_potion_of_harming { + background-position: -736px -1024px +} + +.mcsprite-splash_potion_of_healing { + background-position: -768px -1024px +} + +.mcsprite-splash_potion_of_invisibility { + background-position: -800px -1024px +} + +.mcsprite-splash_potion_of_leaping { + background-position: -832px -1024px +} + +.mcsprite-splash_potion_of_levitation { + background-position: -864px -1024px +} + +.mcsprite-splash_potion_of_luck { + background-position: -896px -1024px +} + +.mcsprite-splash_potion_of_night_vision { + background-position: -928px -1024px +} + +.mcsprite-splash_potion_of_poison { + background-position: -960px -1024px +} + +.mcsprite-splash_potion_of_regeneration { + background-position: -992px -1024px +} + +.mcsprite-splash_potion_of_slow_falling { + background-position: -1024px -1024px +} + +.mcsprite-splash_potion_of_slowness { + background-position: -1056px -1024px +} + +.mcsprite-splash_potion_of_strength { + background-position: -1088px -1024px +} + +.mcsprite-splash_potion_of_swiftness { + background-position: -1120px -1024px +} + +.mcsprite-splash_potion_of_the_turtle_master { + background-position: -1152px -1024px +} + +.mcsprite-splash_potion_of_water_breathing { + background-position: -1184px -1024px +} + +.mcsprite-splash_potion_of_weakness { + background-position: -1216px -1024px +} + +.mcsprite-splash_water_bottle { + background-position: -1248px -1024px +} + +.mcsprite-sponge { + background-position: 0 -1056px +} + +.mcsprite-spore_blossom { + background-position: -32px -1056px +} + +.mcsprite-spruce_boat { + background-position: -64px -1056px +} + +.mcsprite-spruce_button { + background-position: -96px -1056px +} + +.mcsprite-spruce_door { + background-position: -128px -1056px +} + +.mcsprite-spruce_fence { + background-position: -160px -1056px +} + +.mcsprite-spruce_fence_gate { + background-position: -192px -1056px +} + +.mcsprite-spruce_leaves { + background-position: -224px -1056px +} + +.mcsprite-spruce_log { + background-position: -256px -1056px +} + +.mcsprite-spruce_planks { + background-position: -288px -1056px +} + +.mcsprite-spruce_pressure_plate { + background-position: -320px -1056px +} + +.mcsprite-spruce_sapling { + background-position: -352px -1056px +} + +.mcsprite-spruce_sign { + background-position: -384px -1056px +} + +.mcsprite-spruce_slab { + background-position: -416px -1056px +} + +.mcsprite-spruce_stairs { + background-position: -448px -1056px +} + +.mcsprite-spruce_trapdoor { + background-position: -480px -1056px +} + +.mcsprite-spruce_wood { + background-position: -512px -1056px +} + +.mcsprite-spruce_wood_button { + background-position: -544px -1056px +} + +.mcsprite-spruce_wood_door { + background-position: -576px -1056px +} + +.mcsprite-spruce_wood_fence { + background-position: -608px -1056px +} + +.mcsprite-spruce_wood_fence_gate { + background-position: -640px -1056px +} + +.mcsprite-spruce_wood_planks { + background-position: -672px -1056px +} + +.mcsprite-spruce_wood_pressure_plate { + background-position: -704px -1056px +} + +.mcsprite-spruce_wood_sign { + background-position: -736px -1056px +} + +.mcsprite-spruce_wood_slab { + background-position: -768px -1056px +} + +.mcsprite-spruce_wood_stairs { + background-position: -800px -1056px +} + +.mcsprite-spruce_wood_trapdoor { + background-position: -832px -1056px +} + +.mcsprite-spyglass { + background-position: -864px -1056px +} + +.mcsprite-squid_spawn_egg { + background-position: -896px -1056px +} + +.mcsprite-steak { + background-position: -928px -1056px +} + +.mcsprite-stick { + background-position: -960px -1056px +} + +.mcsprite-sticky_piston { + background-position: -992px -1056px +} + +.mcsprite-stone { + background-position: -1024px -1056px +} + +.mcsprite-stone_axe { + background-position: -1056px -1056px +} + +.mcsprite-stone_brick_slab { + background-position: -1088px -1056px +} + +.mcsprite-stone_brick_stairs { + background-position: -1120px -1056px +} + +.mcsprite-stone_brick_wall { + background-position: -1152px -1056px +} + +.mcsprite-stone_bricks { + background-position: -1184px -1056px +} + +.mcsprite-stone_bricks_monster_egg { + background-position: -1216px -1056px +} + +.mcsprite-stone_button { + background-position: -1248px -1056px +} + +.mcsprite-stone_hoe { + background-position: 0 -1088px +} + +.mcsprite-stone_monster_egg { + background-position: -32px -1088px +} + +.mcsprite-stone_pickaxe { + background-position: -64px -1088px +} + +.mcsprite-stone_pressure_plate { + background-position: -96px -1088px +} + +.mcsprite-stone_shovel { + background-position: -128px -1088px +} + +.mcsprite-stone_slab { + background-position: -160px -1088px +} + +.mcsprite-stone_stairs { + background-position: -192px -1088px +} + +.mcsprite-stone_sword { + background-position: -224px -1088px +} + +.mcsprite-stray_spawn_egg { + background-position: -256px -1088px +} + +.mcsprite-strider_spawn_egg { + background-position: -288px -1088px +} + +.mcsprite-string { + background-position: -320px -1088px +} + +.mcsprite-stripped_acacia_log { + background-position: -352px -1088px +} + +.mcsprite-stripped_acacia_wood { + background-position: -384px -1088px +} + +.mcsprite-stripped_birch_log { + background-position: -416px -1088px +} + +.mcsprite-stripped_birch_wood { + background-position: -448px -1088px +} + +.mcsprite-stripped_crimson_hyphae { + background-position: -480px -1088px +} + +.mcsprite-stripped_crimson_stem { + background-position: -512px -1088px +} + +.mcsprite-stripped_dark_oak_log { + background-position: -544px -1088px +} + +.mcsprite-stripped_dark_oak_wood { + background-position: -576px -1088px +} + +.mcsprite-stripped_jungle_log { + background-position: -608px -1088px +} + +.mcsprite-stripped_jungle_wood { + background-position: -640px -1088px +} + +.mcsprite-stripped_oak_log { + background-position: -672px -1088px +} + +.mcsprite-stripped_oak_wood { + background-position: -704px -1088px +} + +.mcsprite-stripped_spruce_log { + background-position: -736px -1088px +} + +.mcsprite-stripped_spruce_wood { + background-position: -768px -1088px +} + +.mcsprite-stripped_warped_hyphae { + background-position: -800px -1088px +} + +.mcsprite-stripped_warped_stem { + background-position: -832px -1088px +} + +.mcsprite-structure_block { + background-position: -864px -1088px +} + +.mcsprite-structure_void { + background-position: -896px -1088px +} + +.mcsprite-sugar { + background-position: -928px -1088px +} + +.mcsprite-sugar_cane { + background-position: -960px -1088px +} + +.mcsprite-sunflower { + background-position: -992px -1088px +} + +.mcsprite-suspicious_stew { + background-position: -1024px -1088px +} + +.mcsprite-sweet_berries { + background-position: -1056px -1088px +} + +.mcsprite-tall_grass { + background-position: -1088px -1088px +} + +.mcsprite-target { + background-position: -1120px -1088px +} + +.mcsprite-terracotta { + background-position: -1152px -1088px +} + +.mcsprite-thick_lingering_potion { + background-position: -1184px -1088px +} + +.mcsprite-thick_potion { + background-position: -1216px -1088px +} + +.mcsprite-thick_splash_potion { + background-position: -1248px -1088px +} + +.mcsprite-tinted_glass { + background-position: 0 -1120px +} + +.mcsprite-tipped_arrow { + background-position: -32px -1120px +} + +.mcsprite-tnt { + background-position: -64px -1120px +} + +.mcsprite-top_snow { + background-position: -96px -1120px +} + +.mcsprite-torch { + background-position: -128px -1120px +} + +.mcsprite-totem_of_undying { + background-position: -160px -1120px +} + +.mcsprite-trader_llama_spawn_egg { + background-position: -192px -1120px +} + +.mcsprite-trapped_chest { + background-position: -224px -1120px +} + +.mcsprite-treasure_map { + background-position: -256px -1120px +} + +.mcsprite-trident { + background-position: -288px -1120px +} + +.mcsprite-tripwire_hook { + background-position: -320px -1120px +} + +.mcsprite-tropical_fish { + background-position: -352px -1120px +} + +.mcsprite-tropical_fish_spawn_egg { + background-position: -384px -1120px +} + +.mcsprite-tube_coral { + background-position: -416px -1120px +} + +.mcsprite-tube_coral_block { + background-position: -448px -1120px +} + +.mcsprite-tube_coral_fan { + background-position: -480px -1120px +} + +.mcsprite-tuff { + background-position: -512px -1120px +} + +.mcsprite-turtle_egg { + background-position: -544px -1120px +} + +.mcsprite-turtle_helmet { + background-position: -576px -1120px +} + +.mcsprite-turtle_shell { + background-position: -608px -1120px +} + +.mcsprite-turtle_spawn_egg { + background-position: -640px -1120px +} + +.mcsprite-twisting_vines { + background-position: -672px -1120px +} + +.mcsprite-uncraftable_lingering_potion { + background-position: -704px -1120px +} + +.mcsprite-uncraftable_potion { + background-position: -736px -1120px +} + +.mcsprite-uncraftable_splash_potion { + background-position: -768px -1120px +} + +.mcsprite-uncraftable_tipped_arrow { + background-position: -800px -1120px +} + +.mcsprite-vex_spawn_egg { + background-position: -832px -1120px +} + +.mcsprite-villager_spawn_egg { + background-position: -864px -1120px +} + +.mcsprite-vindicator_spawn_egg { + background-position: -896px -1120px +} + +.mcsprite-vines { + background-position: -928px -1120px +} + +.mcsprite-void_air { + background-position: -960px -1120px +} + +.mcsprite-wandering_trader_spawn_egg { + background-position: -992px -1120px +} + +.mcsprite-warped_button { + background-position: -1024px -1120px +} + +.mcsprite-warped_door { + background-position: -1056px -1120px +} + +.mcsprite-warped_fence { + background-position: -1088px -1120px +} + +.mcsprite-warped_fence_gate { + background-position: -1120px -1120px +} + +.mcsprite-warped_fungus { + background-position: -1152px -1120px +} + +.mcsprite-warped_fungus_on_a_stick { + background-position: -1184px -1120px +} + +.mcsprite-warped_hyphae { + background-position: -1216px -1120px +} + +.mcsprite-warped_nylium { + background-position: -1248px -1120px +} + +.mcsprite-warped_planks { + background-position: 0 -1152px +} + +.mcsprite-warped_pressure_plate { + background-position: -32px -1152px +} + +.mcsprite-warped_roots { + background-position: -64px -1152px +} + +.mcsprite-warped_sign { + background-position: -96px -1152px +} + +.mcsprite-warped_slab { + background-position: -128px -1152px +} + +.mcsprite-warped_stairs { + background-position: -160px -1152px +} + +.mcsprite-warped_stem { + background-position: -192px -1152px +} + +.mcsprite-warped_trapdoor { + background-position: -224px -1152px +} + +.mcsprite-warped_wart_block { + background-position: -256px -1152px +} + +.mcsprite-water { + background-position: -288px -1152px +} + +.mcsprite-water_bottle { + background-position: -320px -1152px +} + +.mcsprite-water_bucket { + background-position: -352px -1152px +} + +.mcsprite-waxed_block_of_copper { + background-position: -384px -1152px +} + +.mcsprite-waxed_copper { + background-position: -416px -1152px +} + +.mcsprite-waxed_copper_block { + background-position: -448px -1152px +} + +.mcsprite-waxed_cut_copper { + background-position: -480px -1152px +} + +.mcsprite-waxed_cut_copper_block { + background-position: -512px -1152px +} + +.mcsprite-waxed_cut_copper_slab { + background-position: -544px -1152px +} + +.mcsprite-waxed_cut_copper_stairs { + background-position: -576px -1152px +} + +.mcsprite-waxed_exposed_copper { + background-position: -608px -1152px +} + +.mcsprite-waxed_exposed_copper_block { + background-position: -640px -1152px +} + +.mcsprite-waxed_exposed_cut_copper { + background-position: -672px -1152px +} + +.mcsprite-waxed_exposed_cut_copper_block { + background-position: -704px -1152px +} + +.mcsprite-waxed_exposed_cut_copper_slab { + background-position: -736px -1152px +} + +.mcsprite-waxed_exposed_cut_copper_stairs { + background-position: -768px -1152px +} + +.mcsprite-waxed_oxidized_copper { + background-position: -800px -1152px +} + +.mcsprite-waxed_oxidized_copper_block { + background-position: -832px -1152px +} + +.mcsprite-waxed_oxidized_cut_copper { + background-position: -864px -1152px +} + +.mcsprite-waxed_oxidized_cut_copper_block { + background-position: -896px -1152px +} + +.mcsprite-waxed_oxidized_cut_copper_slab { + background-position: -928px -1152px +} + +.mcsprite-waxed_oxidized_cut_copper_stairs { + background-position: -960px -1152px +} + +.mcsprite-waxed_weathered_copper { + background-position: -992px -1152px +} + +.mcsprite-waxed_weathered_copper_block { + background-position: -1024px -1152px +} + +.mcsprite-waxed_weathered_cut_copper { + background-position: -1056px -1152px +} + +.mcsprite-waxed_weathered_cut_copper_block { + background-position: -1088px -1152px +} + +.mcsprite-waxed_weathered_cut_copper_slab { + background-position: -1120px -1152px +} + +.mcsprite-waxed_weathered_cut_copper_stairs { + background-position: -1152px -1152px +} + +.mcsprite-weathered_copper { + background-position: -1184px -1152px +} + +.mcsprite-weathered_copper_block { + background-position: -1216px -1152px +} + +.mcsprite-weathered_cut_copper { + background-position: -1248px -1152px +} + +.mcsprite-weathered_cut_copper_block { + background-position: 0 -1184px +} + +.mcsprite-weathered_cut_copper_slab { + background-position: -32px -1184px +} + +.mcsprite-weathered_cut_copper_stairs { + background-position: -64px -1184px +} + +.mcsprite-weeping_vines { + background-position: -96px -1184px +} + +.mcsprite-wet_sponge { + background-position: -128px -1184px +} + +.mcsprite-wheat { + background-position: -160px -1184px +} + +.mcsprite-wheat_seeds { + background-position: -192px -1184px +} + +.mcsprite-white_banner { + background-position: -224px -1184px +} + +.mcsprite-white_bed { + background-position: -256px -1184px +} + +.mcsprite-white_bed_lce { + background-position: -288px -1184px +} + +.mcsprite-white_candle { + background-position: -320px -1184px +} + +.mcsprite-white_carpet { + background-position: -352px -1184px +} + +.mcsprite-white_concrete { + background-position: -384px -1184px +} + +.mcsprite-white_concrete_powder { + background-position: -416px -1184px +} + +.mcsprite-white_dye { + background-position: -448px -1184px +} + +.mcsprite-white_firework_star { + background-position: -480px -1184px +} + +.mcsprite-white_glazed_terracotta { + background-position: -512px -1184px +} + +.mcsprite-white_shield { + background-position: -544px -1184px +} + +.mcsprite-white_shulker_box { + background-position: -576px -1184px +} + +.mcsprite-white_stained_glass { + background-position: -608px -1184px +} + +.mcsprite-white_stained_glass_pane { + background-position: -640px -1184px +} + +.mcsprite-white_terracotta { + background-position: -672px -1184px +} + +.mcsprite-white_tulip { + background-position: -704px -1184px +} + +.mcsprite-white_wool { + background-position: -736px -1184px +} + +.mcsprite-witch_spawn_egg { + background-position: -768px -1184px +} + +.mcsprite-wither_rose { + background-position: -800px -1184px +} + +.mcsprite-wither_skeleton_skull { + background-position: -832px -1184px +} + +.mcsprite-wither_skeleton_spawn_egg { + background-position: -864px -1184px +} + +.mcsprite-wolf_spawn_egg { + background-position: -896px -1184px +} + +.mcsprite-wooden_axe { + background-position: -928px -1184px +} + +.mcsprite-wooden_hoe { + background-position: -960px -1184px +} + +.mcsprite-wooden_pickaxe { + background-position: -992px -1184px +} + +.mcsprite-wooden_shovel { + background-position: -1024px -1184px +} + +.mcsprite-wooden_slab { + background-position: -1056px -1184px +} + +.mcsprite-wooden_sword { + background-position: -1088px -1184px +} + +.mcsprite-woodland_explorer_map { + background-position: -1120px -1184px +} + +.mcsprite-written_book { + background-position: -1152px -1184px +} + +.mcsprite-yellow_banner { + background-position: -1184px -1184px +} + +.mcsprite-yellow_bed { + background-position: -1216px -1184px +} + +.mcsprite-yellow_bed_lce { + background-position: -1248px -1184px +} + +.mcsprite-yellow_candle { + background-position: 0 -1216px +} + +.mcsprite-yellow_carpet { + background-position: -32px -1216px +} + +.mcsprite-yellow_concrete { + background-position: -64px -1216px +} + +.mcsprite-yellow_concrete_powder { + background-position: -96px -1216px +} + +.mcsprite-yellow_dye { + background-position: -128px -1216px +} + +.mcsprite-yellow_firework_star { + background-position: -160px -1216px +} + +.mcsprite-yellow_glazed_terracotta { + background-position: -192px -1216px +} + +.mcsprite-yellow_shield { + background-position: -224px -1216px +} + +.mcsprite-yellow_shulker_box { + background-position: -256px -1216px +} + +.mcsprite-yellow_stained_glass { + background-position: -288px -1216px +} + +.mcsprite-yellow_stained_glass_pane { + background-position: -320px -1216px +} + +.mcsprite-yellow_terracotta { + background-position: -352px -1216px +} + +.mcsprite-yellow_wool { + background-position: -384px -1216px +} + +.mcsprite-zoglin_spawn_egg { + background-position: -416px -1216px +} + +.mcsprite-zombie_head { + background-position: -448px -1216px +} + +.mcsprite-zombie_horse_spawn_egg { + background-position: -480px -1216px +} + +.mcsprite-zombie_pigman_spawn_egg { + background-position: -512px -1216px +} + +.mcsprite-zombie_spawn_egg { + background-position: -544px -1216px +} + +.mcsprite-zombie_villager_spawn_egg { + background-position: -576px -1216px +} + +.mcsprite-zombified_piglin_spawn_egg { + background-position: -608px -1216px +} + +.toc { + display: none; + position: relative; + margin: 1em 0; + padding: .2em .5em; + background-color: #f8f9fa; + border: solid 1px #eaecf0; + box-sizing: border-box +} + +.toctogglecheckbox ~ ul { + visibility: hidden; + height: 0 +} + +.toctogglecheckbox:not(:checked) ~ ul { + visibility: visible; + padding-bottom: 20px; + height: auto +} + +.toctitle { + padding: 0 25px 0 32px +} + +.toctitle .mw-ui-icon { + position: absolute; + left: 0 +} + +.toctitle .toctogglespan + .mw-ui-icon { + top: 8px; + right: 0; + left: auto +} + +.toctogglelabel { + cursor: pointer; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 50px; + z-index: 1 +} + +.client-js .toc .toctitle { + visibility: hidden; + background-position: right center; + font-weight: 700; + border-bottom: 0 +} + +.client-js .toc .toctitle h2 { + display: inline-block; + font-family: -apple-system, blinkmacsystemfont, segoe ui, roboto, lato, helvetica, arial, sans-serif; + font-size: 1.125em; + vertical-align: middle +} + +.client-js .toc .tocnumber { + display: none +} + +.client-js .toc > ul { + margin: 0 22.85714286em 0 32px; + padding-left: 0; + font-size: .875em +} + +.client-js .toc ul { + list-style: none +} + +@media screen and (min-width: 720px) { + .client-js .toc { + display: table + } + + .client-js .toc .toctitle { + visibility: visible + } +} + +body { + font-family: -apple-system, blinkmacsystemfont, segoe ui, roboto, lato, helvetica, arial, sans-serif; + line-height: 1.4; + -webkit-tap-highlight-color: rgba(0, 0, 0, .2); + overflow-y: scroll +} + +.content { + line-height: 1.65; + word-wrap: break-word +} + +.content .center { + width: 100%; + text-align: center +} + +.content .center > *, .content .center .thumb { + margin-left: auto; + margin-right: auto +} + +@media all and (max-width: 320px -1) { + html { + font-size: 80% + } + + .content { + margin: 0 12px + } +} + +.nomobile { + display: none !important +} + +@supports (font: -apple-system-body) { + html { + font: -apple-system-body + } + + body { + font-size: 94.11764706% + } + + @media all and (max-width: 320px -1) { + body { + font-size: 75.29411765% + } + } +} + +.content figure, .content .thumb { + margin: .6em 0 +} + +.content figure .thumbinner, .content .thumb .thumbinner { + margin: 0 auto; + max-width: 100% !important +} + +.content figcaption, .content .thumbcaption { + margin: .5em 0 0; + font-size: .8125em; + line-height: 1.5; + padding: 0 !important; + color: #54595d +} + +.content .thumbcaption { + width: auto !important +} + +.content .mw-image-border, .content .thumbborder { + border: 1px solid #c8ccd1 +} + +.content .magnify { + display: none +} + +.content img { + vertical-align: middle +} + +.content .floatright { + clear: right; + float: right; + margin: 0 0 .6em .6em +} + +.content .floatleft { + clear: left; + float: left; + margin: 0 .6em .6em 0 +} + +.content a > img, .content noscript > img { + max-width: 100% !important; + height: auto !important +} + +.content .noresize { + max-width: 100%; + overflow-x: auto +} + +.content .noresize a > img { + max-width: none !important +} + +h1 { + font-size: 1.7em +} + +h2 { + font-size: 1.5em +} + +h3 { + font-size: 1.2em; + font-weight: 700 +} + +h4 { + font-weight: 700 +} + +.pre-content h1, .content h1, .content h2 { + font-family: linux libertine, helvetica, georgia, times, serif +} + +.pre-content h1, .content h1, .content h2, h3, h4, h5, h6 { + line-height: 1.3; + word-wrap: break-word; + word-break: break-word +} + +.content h2, .content h3, .content h4, .content h5, .content h6 { + padding: .5em 0 +} + +.content p + h3 { + margin-top: 1.5em +} + +.content { +} + +.content ol { + padding-left: 2.25em +} + +.content ul { + list-style-type: disc; + padding-left: 1em +} + +.content ul > li > ul { + list-style-type: circle +} + +.content ul > li > ul > li > ul { + list-style-type: square +} + +.content ol ol, .content ul ol, .content ol ul, .content ul ul { + margin-left: 1em +} + +.content li { + margin-bottom: 10px +} + +.content li:last-child { + margin-bottom: inherit +} + +dl { + margin-left: 1em +} + +dl dt { + font-weight: 700 +} + +dl dd { + display: block; + overflow: auto +} + +body.mw-hide-empty-elt .mw-empty-elt { + display: none +} + +a:not([href]) { + color: #3f7dfb; + cursor: pointer +} + +a { + color: #3f7dfb; + text-decoration: none +} + +a:visited { + color: #ba91ff +} + +a:active { + color: #986be5 +} + +a:hover { + text-decoration: underline +} + +a.new, a.new:visited, a.new:hover { + color: #d33 +} + +a.new > *, a.new:visited > *, a.new:hover > * { + color: #d33 +} + +a.external { + background-size: 10px; + background-repeat: no-repeat; + background-position: center right; + padding-right: 13px +} + +.return-link { + display: block; + font-size: .875em; + margin-top: 1.5em +} + +.plainlinks a { + background: 0 0 !important; + padding: 0 !important +} + +.content p { + margin: .5em 0 1em +} + +.content hr { + background-color: #a2a9b1; + height: 1px; + border: 0 +} + +.content kbd, .content samp, .content code, .content pre { + font-family: menlo, consolas, liberation mono, courier new, monospace; + border: solid 1px #c8ccd1; + white-space: pre-wrap +} + +.content code { + padding: .2em .5em +} + +.content pre { + padding: 1em +} + +b, strong { + font-weight: 700 +} + +blockquote { + border-left: 3px solid #c8ccd1; + padding: 8px 24px 8px 32px; + font-family: linux libertine, helvetica, georgia, times, serif; + font-size: 1.1em +} + +blockquote > :first-child { + margin-top: 0 +} + +blockquote > :last-child { + margin-bottom: 0 +} + +blockquote > :only-child { + margin-top: 0; + margin-bottom: 0 +} + +em, i { + font-style: italic +} + +sup { + vertical-align: super +} + +sub { + vertical-align: sub +} + +sub, sup, .content .mw-ref { + font-size: .75em; + line-height: 1 +} + +@media all and (max-width: 720px) { + .content table { + display: block; + width: 100% !important; + box-sizing: border-box + } + + .content table.wikitable { + border: 0 + } + + .content caption { + display: block + } +} + +.content table { + margin: 1em 0; + overflow: auto; + overflow-y: hidden; + overflow-x: auto +} + +.content table caption { + text-align: left +} + +.wikitable { + border: 1px solid #54595d; + border-color: rgba(84, 89, 93, .3) +} + +.wikitable > tr > th, .wikitable > tr > td, .wikitable > * > tr > th, .wikitable > * > tr > td { + border: 1px solid #54595d; + border-color: rgba(84, 89, 93, .3); + padding: .2em +} + +.wikitable > tr > th, .wikitable > * > tr > th { + background-color: #eaecf0 +} + +@media screen and (min-width: 720px) { + .client-js #searchIcon { + display: none + } + + .header .branding-box { + width: 10.0625em + } + + .header .search-box { + display: table-cell; + width: auto + } + + .header .search-box .search { + width: 23.4375em + } + + .pre-content, #mw-content-text > form, .content, .post-content { + max-width: 993.3px; + margin: 0 3.35em + } + + .content figure, .content .thumb { + max-width: 704px + } + + .content figure.mw-halign-left, .content .thumb.mw-halign-left, .content figure.tleft, .content .thumb.tleft { + float: left; + clear: left; + margin-right: 1.4em + } + + .content figure.mw-default-size, .content .thumb.mw-default-size, .content figure.mw-halign-right, .content .thumb.mw-halign-right, .content figure.tright, .content .thumb.tright { + float: right; + clear: right; + margin-left: 1.4em + } + + .content table caption { + background: inherit + } + + .content table tbody { + display: table-row-group + } + + .last-modified-bar { + background-color: transparent; + padding-left: 0; + padding-right: 0; + font-size: 1em + } +} + +@media screen and (min-width: 1000px) { + .banner-container, .header, .page-header-bar, .overlay-header, .content, .overlay-content, .content-unstyled, .pre-content, .post-content, #mw-content-text > form { + margin-left: auto; + margin-right: auto; + width: 90%; + max-width: 993.3px + } + + .header { + max-width: 995.3px + } +} + +toast.mw-notification-type-error, .mw-notification.mw-notification-type-error { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&format=rasterized&skin=minerva&version=qhhuv); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&format=original&skin=minerva&version=qhhuv) +} + +toast.mw-notification-type-error, .mw-notification.mw-notification-type-error--reference { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&variant=reference&format=rasterized&skin=minerva&version=qhhuv); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=toast.mw-notification-type-error%2C.mw-notification.mw-notification-type-error&variant=reference&format=original&skin=minerva&version=qhhuv) +} + +a.external { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&format=rasterized&lang=en&skin=minerva&version=qhhuv); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&format=original&lang=en&skin=minerva&version=qhhuv) +} + +a.external--reference { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&variant=reference&format=rasterized&lang=en&skin=minerva&version=qhhuv); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.content.styles.images&image=a.external&variant=reference&format=original&lang=en&skin=minerva&version=qhhuv) +} + +.mw-ui-icon-wikimedia-history-base20:before, .mw-ui-background-icon-history { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-history-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-history-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=history&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-language-base20:before, .mw-ui-background-icon-language { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-language-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-language-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=language&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-edit-base20:before, .mw-ui-background-icon-edit { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-edit-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-edit-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=edit&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-editLock-base20:before, .mw-ui-background-icon-editLock { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-editLock-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-editLock-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=editLock&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-search-base20:before, .mw-ui-background-icon-search { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-search-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-search-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=search&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-menu-base20:before, .mw-ui-background-icon-menu { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-menu-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-menu-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=menu&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-star-base20:before, .mw-ui-background-icon-star { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-star-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-star-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=star&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-halfStar-base20:before, .mw-ui-background-icon-halfStar { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&format=rasterized&lang=en&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&format=original&lang=en&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-halfStar-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=invert&format=rasterized&lang=en&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=invert&format=original&lang=en&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-halfStar-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=progressive&format=rasterized&lang=en&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=halfStar&variant=progressive&format=original&lang=en&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-unStar-base20:before, .mw-ui-background-icon-unStar { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-unStar-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-unStar-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=unStar&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-userAvatar-base20:before, .mw-ui-background-icon-userAvatar { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-userAvatar-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=invert&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=invert&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-wikimedia-userAvatar-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=progressive&format=rasterized&skin=minerva&version=4y50j); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.icons.wikimedia&image=userAvatar&variant=progressive&format=original&skin=minerva&version=4y50j) +} + +.mw-ui-icon-minerva-speechBubbles:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=speechBubbles&format=rasterized&lang=en&skin=minerva&version=jhnt0); + background-image: linear-gradient(transparent, transparent), url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+c3BlZWNoIGJ1YmJsZXM8L3RpdGxlPjxnIGZpbGw9IiM1NDU5NWQiPjxwYXRoIGQ9Ik0xNyA0djdhMiAyIDAgMDEtMiAySDR2MWEyIDIgMCAwMDIgMmgxMGw0IDRWNmEyIDIgMCAwMC0yLTJ6TTYgMTBIMHY2eiIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgcng9IjIiLz48L2c+PC9zdmc+) +} + +.mw-ui-icon-minerva-specialPages:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=specialPages&format=rasterized&lang=en&skin=minerva&version=jhnt0); + background-image: linear-gradient(transparent, transparent), url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+c3BlY2lhbCBwYWdlczwvdGl0bGU+PGcgZmlsbD0iIzU0NTk1ZCI+PHBhdGggZD0iTTcgMGEyIDIgMCAwMC0yIDJoOWEyIDIgMCAwMTIgMnYxMmEyIDIgMCAwMDItMlYyYTIgMiAwIDAwLTItMnoiLz48cGF0aCBkPSJNMTMgMjBINGEyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg5YTIgMiAwIDAxMiAydjEzYTIgMiAwIDAxLTIgMnptLTYuNS0zLjVsLjQxLTEuMDlMOCAxNWwtMS4wOS0uNDEtLjQxLTEuMDktLjQxIDEuMDlMNSAxNWwxLjA5LjQxLjQxIDEuMDl6bTIuOTgyLS45NDlsLjk1Mi0yLjU2MSAyLjUzLS45NjQtMi41My0uOTY0TDkuNDgyIDguNWwtLjk1MiAyLjU2Mi0yLjUzLjk2NCAyLjUzLjk2NC45NTIgMi41NjF6TTYgMTAuNWwuNTQ3LTEuNDUzTDggOC41bC0xLjQ1My0uNTQ3TDYgNi41bC0uNTQ3IDEuNDUzTDQgOC41bDEuNDUzLjU0N0w2IDEwLjV6Ii8+PC9nPjwvc3ZnPg==) +} + +.mw-ui-icon-minerva-recentChanges:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=recentChanges&format=rasterized&lang=en&skin=minerva&version=jhnt0); + background-image: linear-gradient(transparent, transparent), url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+cmVjZW50IGNoYW5nZXM8L3RpdGxlPjxnIGZpbGw9IiM1NDU5NWQiPjxjaXJjbGUgY3g9IjIiIGN5PSI0IiByPSIyIi8+PGNpcmNsZSBjeD0iMiIgY3k9IjEwIiByPSIyIi8+PGNpcmNsZSBjeD0iMiIgY3k9IjE2IiByPSIyIi8+PHBhdGggZD0iTTYgM2gxMXYySDZ6bTAgNmg2djJINnptMCA2aDJ2Mkg2em0xMi43Ni0zLjExbDEuMDc4LTEuMTEyYS41NTYuNTU2IDAgMDAwLS43ODNsLTEuODU1LTEuODMzYS41NTYuNTU2IDAgMDAtLjc4MyAwbC0xLjA5IDEuMDc3IDIuNjUgMi42NXptLTMuMjI3LTIuMDYyTDEwIDE1LjM2MVYxOGgyLjYzOWw1LjUzMy01LjUzM3oiLz48L2c+PC9zdmc+) +} + +.mw-ui-icon-minerva-die:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=die&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=die&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-heart:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=heart&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=heart&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-home:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=home&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=home&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-logIn:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logIn&format=rasterized&lang=en&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logIn&format=original&lang=en&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-logOut:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logOut&format=rasterized&lang=en&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=logOut&format=original&lang=en&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-settings:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=settings&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=settings&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-mapPin:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=mapPin&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=mapPin&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-unStar:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=unStar&format=rasterized&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=unStar&format=original&skin=minerva&version=17p52) +} + +.mw-ui-icon-minerva-userContributions:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=userContributions&format=rasterized&lang=en&skin=minerva&version=17p52); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.mainMenu.icons&image=userContributions&format=original&lang=en&skin=minerva&version=17p52) +} + +#mw-mf-page-left { + position: fixed; + top: 0; + left: 0; + bottom: 0; + min-width: 275px; + visibility: hidden; + max-width: 80%; + z-index: 2; + overflow-y: auto; + background-color: #eaecf0; + -webkit-transform: translate(-100%, 0); + -ms-transform: translate(-100%, 0); + transform: translate(-100%, 0) +} + +@media screen and (min-width: 720px) { + #mw-mf-page-left { + min-width: 320px + } +} + +#mw-mf-page-left ul { + padding-bottom: 22px +} + +.main-menu-mask { + position: fixed; + top: 0; + left: 0; + right: 0; + opacity: 0; + bottom: 0; + background: rgba(0, 0, 0, .8); + z-index: 1; + visibility: hidden +} + +#main-menu-input:checked ~ .main-menu-mask { + visibility: visible; + opacity: .5 +} + +#main-menu-input:checked ~ #mw-mf-page-left { + visibility: visible; + box-shadow: 1px 0 8px 0 rgba(0, 0, 0, .35); + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0) +} + +.minerva-animations-ready #mw-mf-page-left { + -webkit-transition: opacity 250ms ease-in-out, visibility 250ms ease-in-out, transform 250ms ease-in-out; + transition: opacity 250ms ease-in-out, visibility 250ms ease-in-out, transform 250ms ease-in-out +} + +.minerva-animations-ready .main-menu-mask { + -webkit-transition: opacity 100ms ease-in-out, visibility 0ms linear 100ms; + transition: opacity 100ms ease-in-out, visibility 0ms linear 100ms +} + +.minerva-animations-ready #main-menu-input:checked ~ .main-menu-mask { + -webkit-transition: opacity 100ms ease-in-out; + transition: opacity 100ms ease-in-out +} + +.navigation-full-screen #mw-mf-page-left { + max-width: none; + -webkit-transform: none; + -ms-transform: none; + transform: none +} + +.hotfix-T264376 .main-menu-mask { + display: none +} + +.hotfix-T264376 #main-menu-input:checked ~ .main-menu-mask { + display: block +} + +#mw-mf-page-left .secondary-action { + border: 0; + font-size: 16px; + position: absolute; + right: 0; + top: 0; + bottom: 0; + border-left: 1px solid #a2a9b1; + color: transparent +} + +#mw-mf-page-left .primary-action { + margin-right: 3.5em +} + +#mw-mf-page-left ul:first-child li:first-child { + border-top: 0 +} + +#mw-mf-page-left ul li { + background-color: #fff; + position: relative; + border-top: 1px solid #eaecf0; + margin-top: -1px +} + +#mw-mf-page-left ul li:first-child { + border-top: 0 +} + +#mw-mf-page-left ul li a { + color: #54595d; + display: block; + max-width: 100%; + padding: 12px 10px 12px 15px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +#mw-mf-page-left ul li a.secondary-action { + padding-left: 10px +} + +#mw-mf-page-left ul li a:hover { + box-shadow: inset 4px 0 0 0 #36c; + text-decoration: none +} + +#mw-mf-page-left ul li a span { + font-size: .875em; + font-weight: 700; + vertical-align: middle +} + +#mw-mf-page-left ul.hlist li { + background-color: transparent; + border: 0; + margin: 0; + font-size: .75em +} + +#mw-mf-page-left ul.hlist li:after { + content: none +} + +#mw-mf-page-left ul.hlist li a { + color: #36c; + padding: .7em 12px +} + +#mw-mf-page-left ul.hlist li a:hover { + background-color: transparent; + box-shadow: none +} + +.notifications-overlay { + visibility: visible +} + +.notifications-overlay.navigation-drawer { + display: block; + width: auto; + right: 0; + box-shadow: -5px 0 0 0 rgba(0, 0, 0, .35); + -webkit-transform: translate(100%, 0); + -ms-transform: translate(100%, 0); + transform: translate(100%, 0); + -webkit-transition: transform 250ms ease-in-out; + transition: transform 250ms ease-in-out +} + +.notifications-overlay.navigation-drawer.visible { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0) +} + +@media all and (min-width: 720px) { + .notifications-overlay.navigation-drawer { + left: 40% + } + + .notifications-overlay.navigation-drawer .overlay-header { + margin: 0; + width: 100%; + max-width: none + } + + .notifications-overlay.navigation-drawer .overlay-header .cancel { + left: 0 + } +} + +.toggle-list__checkbox { + position: absolute; + z-index: -1; + opacity: 0 +} + +.toggle-list__toggle { + display: inline-block; + cursor: pointer +} + +.toggle-list__checkbox:focus + .toggle-list__toggle { + outline: dotted 1px; + outline: auto #447ff5 +} + +.toggle-list__checkbox:checked + .toggle-list__toggle { + outline: 0; + background: rgba(1, 1, 1, .1) +} + +.touch-events .toggle-list__checkbox:focus + .toggle-list__toggle { + outline: 0 +} + +.toggle-list__list { + background: #fff; + position: absolute; + overflow-y: auto; + z-index: 2; + box-shadow: 0 5px 17px 0 rgba(0, 0, 0, .24), 0 0 1px #a2a9b1; + visibility: hidden; + opacity: 0 +} + +.toggle-list__checkbox:checked ~ .toggle-list__list { + visibility: visible; + opacity: 1 +} + +.mw-ui-icon-minerva-articleRedirect:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-articleRedirect, .mw-ui-icon-articleRedirect-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-articleRedirect, .mw-ui-icon-articleRedirect-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=articleRedirect&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-infoFilled:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-infoFilled, .mw-ui-icon-infoFilled-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-infoFilled, .mw-ui-icon-infoFilled-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=infoFilled&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-quotes:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-quotes, .mw-ui-icon-quotes-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-quotes, .mw-ui-icon-quotes-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=quotes&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-link:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-link, .mw-ui-icon-link-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=invert&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=invert&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-link, .mw-ui-icon-link-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=link&variant=progressive&format=original&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-listBullet:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-listBullet, .mw-ui-icon-listBullet-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-listBullet, .mw-ui-icon-listBullet-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=listBullet&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-ellipsis:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-ellipsis, .mw-ui-icon-ellipsis-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=invert&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=invert&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-ellipsis, .mw-ui-icon-ellipsis-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=ellipsis&variant=progressive&format=original&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-userAvatar:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-userAvatar, .mw-ui-icon-userAvatar-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=invert&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=invert&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-userAvatar, .mw-ui-icon-userAvatar-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatar&variant=progressive&format=original&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-userAvatarOutline:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-userAvatarOutline, .mw-ui-icon-userAvatarOutline-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=invert&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=invert&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-userAvatarOutline, .mw-ui-icon-userAvatarOutline-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userAvatarOutline&variant=progressive&format=original&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-userGroup:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-userGroup, .mw-ui-icon-userGroup-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-userGroup, .mw-ui-icon-userGroup-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userGroup&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-userTalk:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-userTalk, .mw-ui-icon-userTalk-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=invert&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=invert&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-userTalk, .mw-ui-icon-userTalk-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=progressive&format=rasterized&lang=en&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=userTalk&variant=progressive&format=original&lang=en&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-logoWikidata:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-invert.oo-ui-icon-logoWikidata, .mw-ui-icon-logoWikidata-invert:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=invert&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=invert&format=original&skin=minerva&version=bdzvr) +} + +.oo-ui-image-progressive.oo-ui-icon-logoWikidata, .mw-ui-icon-logoWikidata-progressive:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=progressive&format=rasterized&skin=minerva&version=bdzvr); + background-image: linear-gradient(transparent, transparent), url(https://wiki.hypixel.net/load.php?modules=skins.minerva.overflow.icons&image=logoWikidata&variant=progressive&format=original&skin=minerva&version=bdzvr) +} + +.mw-ui-icon-minerva-markup:before { + background-image: url(https://wiki.hypixel.net/load.php?modules=skins.minerva.personalMenu.icons&image=markup&format=rasterized&skin=minerva&version=1j2d9); + background-image: linear-gradient(transparent, transparent), url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48dGl0bGU+bWFya3VwPC90aXRsZT48ZyBmaWxsPSIjNTQ1OTVkIj48cGF0aCBkPSJNNi41IDMuNUwwIDEwbDEuNSAxLjUgNSA1TDggMTVsLTUtNSA1LTV6bTcgMEwxMiA1bDUgNS01IDUgMS41IDEuNUwyMCAxMHoiLz48L2c+PC9zdmc+) +} + +div#mw-content-text { + position: absolute; +} + +body { + text-rendering: optimizeLegibility; + text-rendering: geometricPrecision +} diff --git a/src/main/resources/assets/notenoughupdates/shaders/program/blur.json b/src/main/resources/assets/notenoughupdates/shaders/program/blur.json index 9da3c2e8..01c0578d 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/program/blur.json +++ b/src/main/resources/assets/notenoughupdates/shaders/program/blur.json @@ -1,21 +1,85 @@ { - "blend": { - "func": "add", - "srcrgb": "srcalpha", - "dstrgb": "1-srcalpha" + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "sobel", + "fragment": "blur2", + "attributes": [ + "Position" + ], + "samplers": [ + { + "name": "DiffuseSampler" + } + ], + "uniforms": [ + { + "name": "ProjMat", + "type": "matrix4x4", + "count": 16, + "values": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] }, - "vertex": "sobel", - "fragment": "blur2", - "attributes": [ "Position" ], - "samplers": [ - { "name": "DiffuseSampler" } - ], - "uniforms": [ - { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, - { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, - { "name": "BlurDir", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, - { "name": "Radius", "type": "float", "count": 1, "values": [ 5.0 ] }, - { "name": "AlphaMult", "type": "float", "count": 1, "values": [ 1.0 ] } - ] + { + "name": "InSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + }, + { + "name": "OutSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + }, + { + "name": "BlurDir", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + }, + { + "name": "Radius", + "type": "float", + "count": 1, + "values": [ + 5.0 + ] + }, + { + "name": "AlphaMult", + "type": "float", + "count": 1, + "values": [ + 1.0 + ] + } + ] } diff --git a/src/main/resources/assets/notenoughupdates/shaders/program/dungeonmap.json b/src/main/resources/assets/notenoughupdates/shaders/program/dungeonmap.json index bb41ffd5..a8a3fc79 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/program/dungeonmap.json +++ b/src/main/resources/assets/notenoughupdates/shaders/program/dungeonmap.json @@ -6,14 +6,63 @@ }, "vertex": "dungeonmap", "fragment": "dungeonmap", - "attributes": [ "Position" ], + "attributes": [ + "Position" + ], "samplers": [ - { "name": "DiffuseSampler" } + { + "name": "DiffuseSampler" + } ], "uniforms": [ - { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, - { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, - { "name": "radiusSq", "type": "float", "count": 1, "values": [ 1.0 ] } + { + "name": "ProjMat", + "type": "matrix4x4", + "count": 16, + "values": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "name": "OutSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + }, + { + "name": "InSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + }, + { + "name": "radiusSq", + "type": "float", + "count": 1, + "values": [ + 1.0 + ] + } ] } diff --git a/src/main/resources/assets/notenoughupdates/shaders/program/grayscale.json b/src/main/resources/assets/notenoughupdates/shaders/program/grayscale.json index 048ceb9f..2878f3ed 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/program/grayscale.json +++ b/src/main/resources/assets/notenoughupdates/shaders/program/grayscale.json @@ -6,12 +6,46 @@ }, "vertex": "blit", "fragment": "grayscale", - "attributes": [ "Position" ], + "attributes": [ + "Position" + ], "samplers": [ - { "name": "DiffuseSampler" } + { + "name": "DiffuseSampler" + } ], "uniforms": [ - { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + { + "name": "ProjMat", + "type": "matrix4x4", + "count": 16, + "values": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "name": "OutSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + } ] } diff --git a/src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.json b/src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.json index 653764fb..3bd50d8b 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.json +++ b/src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.json @@ -6,12 +6,46 @@ }, "vertex": "blit", "fragment": "setrgbtoalpha", - "attributes": [ "Position" ], + "attributes": [ + "Position" + ], "samplers": [ - { "name": "DiffuseSampler" } + { + "name": "DiffuseSampler" + } ], "uniforms": [ - { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + { + "name": "ProjMat", + "type": "matrix4x4", + "count": 16, + "values": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "name": "OutSize", + "type": "float", + "count": 2, + "values": [ + 1.0, + 1.0 + ] + } ] } diff --git a/src/main/resources/assets/notenoughupdates/sounds.json b/src/main/resources/assets/notenoughupdates/sounds.json index 6d827876..5a3b5528 100644 --- a/src/main/resources/assets/notenoughupdates/sounds.json +++ b/src/main/resources/assets/notenoughupdates/sounds.json @@ -71,7 +71,6 @@ } ] }, - "titanium.break": { "category": "block", "sounds": [ diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstoneamberbreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstoneamberbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstoneamberbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstoneamberbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstoneamethystbreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstoneamethystbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstoneamethystbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstoneamethystbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstonejadebreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstonejadebreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstonejadebreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstonejadebreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstonejasperbreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstonejasperbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstonejasperbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstonejasperbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstonerubybreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstonerubybreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstonerubybreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstonerubybreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstonesapphirebreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstonesapphirebreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstonesapphirebreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstonesapphirebreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/gemstonetopazbreak.json b/src/main/resources/assets/notenoughupdates/sounds/gemstonetopazbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/gemstonetopazbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/gemstonetopazbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/mithrilbreak.json b/src/main/resources/assets/notenoughupdates/sounds/mithrilbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/mithrilbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/mithrilbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/assets/notenoughupdates/sounds/titaniumbreak.json b/src/main/resources/assets/notenoughupdates/sounds/titaniumbreak.json index b02ee0c7..e46a3897 100644 --- a/src/main/resources/assets/notenoughupdates/sounds/titaniumbreak.json +++ b/src/main/resources/assets/notenoughupdates/sounds/titaniumbreak.json @@ -1 +1,3 @@ -{ "debouncer": 20 } +{ + "debouncer": 20 +} diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index d20efafe..70f63a48 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,16 +1,18 @@ [ -{ - "modid": "notenoughupdates", - "name": "NotEnoughUpdates", - "description": "Mod that shows recipes and useful info for Hypixel's Skyblock gamemode.", - "version": "${version}", - "mcversion": "${mcversion}", - "url": "https://github.com/Moulberry/NotEnoughUpdates/", - "updateUrl": "https://github.com/Moulberry/NotEnoughUpdates/releases", - "authorList": ["Moulberry"], - "credits": "", - "logoFile": "", - "screenshots": [], - "dependencies": [] -} + { + "modid": "notenoughupdates", + "name": "NotEnoughUpdates", + "description": "Mod that shows recipes and useful info for Hypixel's Skyblock gamemode.", + "version": "${version}", + "mcversion": "${mcversion}", + "url": "https://github.com/NotEnoughUpdates/NotEnoughUpdates/", + "updateUrl": "https://github.com/NotEnoughUpdates/NotEnoughUpdates/releases", + "authorList": [ + "Moulberry" + ], + "credits": "", + "logoFile": "", + "screenshots": [], + "dependencies": [] + } ] diff --git a/src/main/resources/mixins.notenoughupdates.json b/src/main/resources/mixins.notenoughupdates.json index ab2c705e..63b8211b 100644 --- a/src/main/resources/mixins.notenoughupdates.json +++ b/src/main/resources/mixins.notenoughupdates.json @@ -4,51 +4,47 @@ "minVersion": "0.7", "compatibilityLevel": "JAVA_8", "mixins": [ - "AccessorEntityAgeable", - "AccessorEntityArmorStand", - "AccessorGuiPlayerTabOverlay", - "MixinAbstractClientPlayer", - "MixinContainer", - "MixinEffectRenderer", - "MixinEntity", - "MixinEntityAgeable", - "MixinEntityHorse", - "MixinEntityPlayer", - "MixinEntityPlayerSP", - "MixinEntityRenderer", - "MixinEntitySkeleton", - "MixinGuiChest", - "MixinGuiContainer", - "MixinGuiIngame", - "MixinGuiInventory", - "MixinGuiScreen", - "MixinInventoryEffectRenderer", - "MixinInventoryPlayer", - "MixinItemCameraTransforms", - "MixinItemRenderer", - "MixinItemStack", - "MixinLayerArmorBase", - "MixinLayerCustomHead", - "MixinMinecraft", - "MixinMouseHelper", - "MixinNetHandlerPlayClient", - "MixinPlayerControllerMP", - "MixinRender", - "MixinRendererLivingEntity", - "MixinRenderFish", - "MixinRenderGlobal", - "MixinRenderItem", - "MixinRenderList", - "MixinTextureManager", - "MixinTileEntitySkullRenderer", - "MixinTileEntitySpecialRenderer", - "MixinVboRenderList", - "MixinWorld", - "MixinWorldClient" + "AccessorEntityAgeable", + "AccessorEntityArmorStand", + "AccessorGuiPlayerTabOverlay", + "MixinAbstractClientPlayer", + "MixinContainer", + "MixinEffectRenderer", + "MixinEntity", + "MixinEntityAgeable", + "MixinEntityHorse", + "MixinEntityPlayer", + "MixinEntityPlayerSP", + "MixinEntityRenderer", + "MixinEntitySkeleton", + "MixinGuiChest", + "MixinGuiContainer", + "MixinGuiIngame", + "MixinGuiInventory", + "MixinGuiScreen", + "MixinInventoryEffectRenderer", + "MixinInventoryPlayer", + "MixinItemCameraTransforms", + "MixinItemRenderer", + "MixinItemStack", + "MixinLayerArmorBase", + "MixinLayerCustomHead", + "MixinMinecraft", + "MixinMouseHelper", + "MixinNetHandlerPlayClient", + "MixinPlayerControllerMP", + "MixinRender", + "MixinRendererLivingEntity", + "MixinRenderFish", + "MixinRenderGlobal", + "MixinRenderItem", + "MixinRenderList", + "MixinTextureManager", + "MixinTileEntitySkullRenderer", + "MixinTileEntitySpecialRenderer", + "MixinVboRenderList", + "MixinWorld", + "MixinWorldClient" ], - "client": [ - "AccessorGuiContainer", - "AccessorGuiEditSign", - "AccessorMinecraft" - ] + "client": ["AccessorGuiContainer", "AccessorGuiEditSign", "AccessorMinecraft"] } diff --git a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java index c0b451e3..12645152 100644 --- a/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java +++ b/src/test/java/io/github/moulberry/notenoughupdates/core/util/Vec3ComparableTest.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.core.util; import net.minecraft.util.BlockPos; diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java index 58233410..123f5bf3 100644 --- a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalMetalDetectorSolverTest.java @@ -1,12 +1,31 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; import io.github.moulberry.notenoughupdates.miscfeatures.CrystalMetalDetectorSolver.SolutionState; import io.github.moulberry.notenoughupdates.util.NEUDebugLogger; import net.minecraft.util.BlockPos; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Assertions; import java.util.ArrayList; @@ -17,10 +36,12 @@ class CrystalMetalDetectorSolverTest { SolutionState expectedState; boolean centerKnown; - public Location(double distance, - Vec3Comparable playerPosition, - SolutionState expectedState, - boolean centerKnown) { + public Location( + double distance, + Vec3Comparable playerPosition, + SolutionState expectedState, + boolean centerKnown + ) { this.distance = distance; this.playerPosition = playerPosition; this.expectedState = expectedState; @@ -38,7 +59,7 @@ class CrystalMetalDetectorSolverTest { void setUp() { CrystalMetalDetectorSolver.initWorld(); CrystalMetalDetectorSolver.treasureAllowedPredicate = blockPos -> true; - NEUDebugLogger.logMethod = CrystalMetalDetectorSolverTest::neuDebugLog; + NEUDebugLogger.logMethod = CrystalMetalDetectorSolverTest::neuDebugLog; NEUDebugLogger.allFlagsEnabled = true; } @@ -59,9 +80,11 @@ class CrystalMetalDetectorSolverTest { } else { findPossibleSolutionsTwice(loc, false); } - Assertions.assertEquals(loc.expectedState, + Assertions.assertEquals( + loc.expectedState, CrystalMetalDetectorSolver.currentState, - "Location index " + index); + "Location index " + index + ); index++; } @@ -70,30 +93,38 @@ class CrystalMetalDetectorSolverTest { @Test void findPossibleSolutions_single_location_sample_is_ignored() { - Location location = new Location(37.3, + Location location = new Location( + 37.3, new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), SolutionState.MULTIPLE, - false); + false + ); CrystalMetalDetectorSolver.findPossibleSolutions(location.distance, location.playerPosition, false); Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, - "Previous state"); + "Previous state" + ); Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.currentState, - "Current state"); + "Current state" + ); } @Test void findPossibleSolutions_currentState_becomes_previousState() { - Location location = new Location(37.3, + Location location = new Location( + 37.3, new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), SolutionState.MULTIPLE, - false); + false + ); findPossibleSolutionsTwice(location, false); Assertions.assertEquals(SolutionState.NOT_STARTED, CrystalMetalDetectorSolver.previousState, - "Previous state"); + "Previous state" + ); Assertions.assertEquals(location.expectedState, CrystalMetalDetectorSolver.currentState, - "Current state"); + "Current state" + ); } @Test @@ -101,15 +132,19 @@ class CrystalMetalDetectorSolverTest { Solution solution = new Solution(); solution.center = new BlockPos(736, 88, 547); solution.expectedSolution = new BlockPos(722, 67, 590); - solution.locations.add(new Location(67.5, + solution.locations.add(new Location( + 67.5, new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), SolutionState.FOUND_KNOWN, - true)); + true + )); // slightly different player position with invalid distance - solution.locations.add(new Location(4.0, + solution.locations.add(new Location( + 4.0, new Vec3Comparable(757.8235166144441, 69.0, 532.8037800566217), SolutionState.INVALID, - true)); + true + )); checkSolution(solution); } @@ -117,14 +152,18 @@ class CrystalMetalDetectorSolverTest { void findPossibleSolutions_state_is_failed_when_second_location_eliminates_all_blocks() { Solution solution = new Solution(); solution.center = new BlockPos(736, 88, 547); - solution.locations.add(new Location(29.4, + solution.locations.add(new Location( + 29.4, new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), SolutionState.MULTIPLE_KNOWN, - true)); - solution.locations.add(new Location(4.0, // actual distance should be 38.2 + true + )); + solution.locations.add(new Location( + 4.0, // actual distance should be 38.2 new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), SolutionState.FAILED, - true)); + true + )); checkSolution(solution); } @@ -132,10 +171,12 @@ class CrystalMetalDetectorSolverTest { void findPossibleSolutions_state_is_found_known_when_center_found_after_location() { Solution solution = new Solution(); solution.center = new BlockPos(736, 88, 547); - solution.locations.add(new Location(67.5, + solution.locations.add(new Location( + 67.5, new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), SolutionState.MULTIPLE, - false)); + false + )); checkSolution(solution); solution.locations.get(0).centerKnown = true; @@ -149,24 +190,30 @@ class CrystalMetalDetectorSolverTest { Solution solution = new Solution(); solution.center = new BlockPos(736, 88, 547); solution.expectedSolution = new BlockPos(722, 67, 590); - solution.locations.add(new Location(67.5, + solution.locations.add(new Location( + 67.5, new Vec3Comparable(757.8235166144441, 68.0, 532.8037800566217), SolutionState.FOUND_KNOWN, - true)); + true + )); checkSolution(solution); } @Test void findPossibleSolutions_states_are_correct_using_multiple_locations_with_unknown_center() { Solution solution = new Solution(); - solution.locations.add(new Location(37.3, + solution.locations.add(new Location( + 37.3, new Vec3Comparable(779.1057116115207, 70.5, 502.2997937667801), SolutionState.MULTIPLE, - false)); - solution.locations.add(new Location(34.8, + false + )); + solution.locations.add(new Location( + 34.8, new Vec3Comparable(782.6999999880791, 71.0, 508.69999998807907), SolutionState.FOUND, - false)); + false + )); solution.expectedSolution = new BlockPos(758, 67, 533); checkSolution(solution); @@ -177,14 +224,18 @@ class CrystalMetalDetectorSolverTest { Solution solution = new Solution(); // First, validate that the solution doesn't work without the center - solution.locations.add(new Location(29.4, + solution.locations.add(new Location( + 29.4, new Vec3Comparable(721.5979761606153, 68.0, 590.9056839507032), SolutionState.MULTIPLE, - false)); - solution.locations.add(new Location(38.2, + false + )); + solution.locations.add(new Location( + 38.2, new Vec3Comparable(711.858759313838, 67.0, 590.3583935310772), SolutionState.MULTIPLE, - false)); + false + )); checkSolution(solution); // Now validate that the solution works with the center diff --git a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java index dff8749c..5cf5fa90 100644 --- a/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java +++ b/src/test/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalWishingCompassSolverTest.java @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + package io.github.moulberry.notenoughupdates.miscfeatures; import io.github.moulberry.notenoughupdates.core.util.Vec3Comparable; @@ -17,7 +36,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; -import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.*; +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.ALL_PARTICLES_MAX_MILLIS; +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.Crystal; +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.HollowsZone; +import static io.github.moulberry.notenoughupdates.miscfeatures.CrystalWishingCompassSolver.getInstance; class CrystalWishingCompassSolverTest { private static final CrystalWishingCompassSolver solver = getInstance(); @@ -51,7 +73,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(754.333618, 138.527710, 239.197800), 55) )), HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); + SolverState.NEED_SECOND_COMPASS + ); private final CompassUse minesOfDivanCompassUse2 = new CompassUse( DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, @@ -80,7 +103,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(759.636658, 135.522827, 266.186371), 0) )), HandleCompassResult.SUCCESS, - SolverState.SOLVED); + SolverState.SOLVED + ); Vec3i minesOfDivanSolution = new Vec3i(735, 98, 451); @@ -110,7 +134,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(454.183441, 88.616600, 775.803040), 54) )), HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); + SolverState.NEED_SECOND_COMPASS + ); private final CompassUse goblinHoldoutCompassUse2 = new CompassUse( DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, @@ -139,7 +164,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(439.108551, 86.620811, 776.031067), 0) )), HandleCompassResult.SUCCESS, - SolverState.SOLVED); + SolverState.SOLVED + ); Vec3i goblinHoldoutKingSolution = new Vec3i(377, 87, 550); Vec3i goblinHoldoutQueenSolution = new Vec3i(322, 139, 769); @@ -171,7 +197,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(570.372192, 121.631874, 565.694946), 0) )), HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); + SolverState.NEED_SECOND_COMPASS + ); private final CompassUse precursorCityCompassUse2 = new CompassUse( DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, @@ -200,7 +227,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(590.766357, 137.556885, 579.791565), 0) )), HandleCompassResult.SUCCESS, - SolverState.SOLVED); + SolverState.SOLVED + ); Vec3i precursorCitySolution = new Vec3i(604, 124, 681); @@ -231,7 +259,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(453.975647, 122.920158, 458.668488), 0) )), HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); + SolverState.NEED_SECOND_COMPASS + ); private final CompassUse jungleCompassUse2 = new CompassUse( DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, @@ -260,13 +289,15 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(437.732666, 127.385803, 467.381592), 1) )), HandleCompassResult.SUCCESS, - SolverState.SOLVED); + SolverState.SOLVED + ); Vec3i jungleSolution = new Vec3i(343, 72, 424); Vec3i jungleSolutionTempleDoor = new Vec3i( jungleSolution.getX() - 57, jungleSolution.getY() + 36, - jungleSolution.getZ() -21); + jungleSolution.getZ() - 21 + ); private final CompassUse magmaCompassUse1 = new CompassUse( 1647745029814L, @@ -295,7 +326,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(462.221954, 59.614719, 550.019165), 0) )), HandleCompassResult.SUCCESS, - SolverState.NEED_SECOND_COMPASS); + SolverState.NEED_SECOND_COMPASS + ); private final CompassUse magmaCompassUse2 = new CompassUse( DELAY_AFTER_FIRST_COMPASS_LAST_PARTICLE, @@ -323,7 +355,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(449.110443, 54.623035, 556.079163), 49) )), HandleCompassResult.SUCCESS, - SolverState.SOLVED); + SolverState.SOLVED + ); Vec3i magmaSolution = new Vec3i(737, 56, 444); @@ -336,7 +369,8 @@ class CrystalWishingCompassSolverTest { new BlockPos(512, 106, 512), null, HandleCompassResult.PLAYER_IN_NUCLEUS, - SolverState.NOT_STARTED); + SolverState.NOT_STARTED + ); private void resetSolverState() { solver.initWorld(); @@ -351,7 +385,7 @@ class CrystalWishingCompassSolverTest { @BeforeEach void setUp() { - NEUDebugLogger.logMethod = CrystalWishingCompassSolverTest::neuDebugLog; + NEUDebugLogger.logMethod = CrystalWishingCompassSolverTest::neuDebugLog; NEUDebugLogger.allFlagsEnabled = true; resetSolverState(); } @@ -361,9 +395,11 @@ class CrystalWishingCompassSolverTest { for (CompassUse compassUse : solution.compassUses) { systemTimeMillis += compassUse.timeIncrementMillis; HandleCompassResult handleCompassResult = solver.handleCompassUse(compassUse.playerPos); - Assertions.assertEquals(compassUse.expectedHandleCompassUseResult, + Assertions.assertEquals( + compassUse.expectedHandleCompassUseResult, handleCompassResult, - "CompassUse index " + index); + "CompassUse index " + index + ); for (ParticleSpawn particle : compassUse.particles) { systemTimeMillis += particle.timeIncrementMillis; @@ -371,15 +407,20 @@ class CrystalWishingCompassSolverTest { particle.spawnLocation.xCoord, particle.spawnLocation.yCoord, particle.spawnLocation.zCoord, - systemTimeMillis); + systemTimeMillis + ); } - Assertions.assertEquals(compassUse.expectedSolverState, + Assertions.assertEquals( + compassUse.expectedSolverState, solver.getSolverState(), - "CompassUse index " + index); + "CompassUse index " + index + ); if (compassUse.expectedSolverState == SolverState.SOLVED) { - Assertions.assertEquals(solution.expectedSolutionCoords, - solver.getSolutionCoords()); + Assertions.assertEquals( + solution.expectedSolutionCoords, + solver.getSolutionCoords() + ); } index++; @@ -395,7 +436,8 @@ class CrystalWishingCompassSolverTest { Solution solution = new Solution( new ArrayList<>(Collections.singletonList(compassUse)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -409,7 +451,8 @@ class CrystalWishingCompassSolverTest { processingFirstUseCompassUse.expectedSolverState = SolverState.PROCESSING_FIRST_USE; Solution processingFirstUseSolution = new Solution( new ArrayList<>(Collections.singletonList(processingFirstUseCompassUse)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); checkSolution(processingFirstUseSolution); Assertions.assertEquals(SolverState.PROCESSING_FIRST_USE, solver.getSolverState()); @@ -419,7 +462,8 @@ class CrystalWishingCompassSolverTest { resetStateCompassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; Solution goodSolution = new Solution( new ArrayList<>(Collections.singletonList(resetStateCompassUse)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(goodSolution); @@ -430,7 +474,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -441,7 +486,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(nucleusCompass)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -457,7 +503,8 @@ class CrystalWishingCompassSolverTest { new ParticleSpawn(new Vec3Comparable(754.358459, 138.536407, 239.200928), 137) )), HandleCompassResult.SUCCESS, - SolverState.PROCESSING_FIRST_USE); + SolverState.PROCESSING_FIRST_USE + ); // STILL_PROCESSING_FIRST_USE is expected instead of LOCATION_TOO_CLOSE since the solver // isn't ready for the second compass use, which includes the location check @@ -467,7 +514,8 @@ class CrystalWishingCompassSolverTest { Solution solution = new Solution( new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -477,13 +525,14 @@ class CrystalWishingCompassSolverTest { void missing_repeating_particles_sets_state_to_failed_timeout_no_repeating() { // Arrange CompassUse compassUse = new CompassUse(minesOfDivanCompassUse1); - compassUse.particles.remove(compassUse.particles.size()-1); - compassUse.particles.get(compassUse.particles.size()-1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; + compassUse.particles.remove(compassUse.particles.size() - 1); + compassUse.particles.get(compassUse.particles.size() - 1).timeIncrementMillis += ALL_PARTICLES_MAX_MILLIS; compassUse.expectedSolverState = SolverState.FAILED_TIMEOUT_NO_REPEATING; Solution solution = new Solution( new ArrayList<>(Collections.singletonList(compassUse)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -498,11 +547,12 @@ class CrystalWishingCompassSolverTest { null, HandleCompassResult.LOCATION_TOO_CLOSE, SolverState.NEED_SECOND_COMPASS - ); + ); Solution solution = new Solution( new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, secondCompassUse)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -557,7 +607,7 @@ class CrystalWishingCompassSolverTest { // reverse the direction of the particles, moving the repeat particle // to "new" end - compassUse2.particles.remove(compassUse2.particles.size()-1); + compassUse2.particles.remove(compassUse2.particles.size() - 1); Collections.reverse(compassUse2.particles); // add a new repeat particle compassUse2.particles.add(new ParticleSpawn(compassUse2.particles.get(0))); @@ -567,7 +617,8 @@ class CrystalWishingCompassSolverTest { compassUse2.expectedSolverState = SolverState.FAILED_INVALID_SOLUTION; Solution solution = new Solution( new ArrayList<>(Arrays.asList(minesOfDivanCompassUse1, compassUse2)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -584,7 +635,7 @@ class CrystalWishingCompassSolverTest { // Arrange CompassUse compassUse1 = new CompassUse(minesOfDivanCompassUse1); CompassUse compassUse2 = new CompassUse(minesOfDivanCompassUse2); - double invalidYOffset = -(minesOfDivanSolution.getY() - (CH_LOWEST_VALID_Y -1)); + double invalidYOffset = -(minesOfDivanSolution.getY() - (CH_LOWEST_VALID_Y - 1)); Vec3 offset = new Vec3(0.0, invalidYOffset, 0.0); compassUse1.playerPos = compassUse1.playerPos.add(offset.xCoord, offset.yCoord, offset.zCoord); @@ -600,7 +651,8 @@ class CrystalWishingCompassSolverTest { Solution solution = new Solution( new ArrayList<>(Arrays.asList(compassUse1, compassUse2)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -646,7 +698,8 @@ class CrystalWishingCompassSolverTest { compassUse.particles.get(2).spawnLocation.addVector(100.0, 100.0, 100.0); Solution solution = new Solution( new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act & Assert checkSolution(solution); @@ -657,7 +710,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); solver.kingsScentPresent = () -> true; // Act @@ -674,7 +728,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); solver.kingsScentPresent = () -> false; // Act @@ -691,7 +746,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); solver.keyInInventory = () -> true; // Act @@ -708,7 +764,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); solver.keyInInventory = () -> false; // Act @@ -725,7 +782,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(precursorCityCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); solver.foundCrystals = () -> EnumSet.noneOf(Crystal.class); solver.keyInInventory = () -> false; solver.kingsScentPresent = () -> false; @@ -747,14 +805,16 @@ class CrystalWishingCompassSolverTest { } private void CheckExcludedTargetsForCrystals( - CompassUse compassUseToExecute, - ArrayList excludedTargets, - EnumSet foundCrystals) { + CompassUse compassUseToExecute, + ArrayList excludedTargets, + EnumSet foundCrystals + ) { // Arrange EnumSet targets; Solution solution = new Solution( new ArrayList<>(Collections.singletonList(compassUseToExecute)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act checkSolution(solution); @@ -796,7 +856,8 @@ class CrystalWishingCompassSolverTest { // Arrange ArrayList excludedTargets = new ArrayList<>(Arrays.asList( CompassTarget.ODAWA, - CompassTarget.JUNGLE_TEMPLE)); + CompassTarget.JUNGLE_TEMPLE + )); // Act & Assert CheckExcludedTargetsForCrystals(jungleCompassUse1, excludedTargets, EnumSet.of(Crystal.AMETHYST)); @@ -837,7 +898,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act checkSolution(solution); @@ -855,12 +917,13 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(minesOfDivanCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act checkSolution(solution); systemTimeMillis += minesOfDivanCompassUse2.timeIncrementMillis; - BlockPos newLocation = minesOfDivanCompassUse2.playerPos.add(-400, 0 ,0); + BlockPos newLocation = minesOfDivanCompassUse2.playerPos.add(-400, 0, 0); HandleCompassResult handleCompassResult = solver.handleCompassUse(newLocation); // Assert @@ -873,7 +936,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(jungleCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act solver.keyInInventory = () -> false; @@ -892,7 +956,8 @@ class CrystalWishingCompassSolverTest { // Arrange Solution solution = new Solution( new ArrayList<>(Collections.singletonList(goblinHoldoutCompassUse1)), - Vec3i.NULL_VECTOR); + Vec3i.NULL_VECTOR + ); // Act solver.kingsScentPresent = () -> false; @@ -980,17 +1045,19 @@ class CrystalWishingCompassSolverTest { } EnumSet GetSolutionTargetsHelper( - HollowsZone compassUsedZone, - EnumSet foundCrystals, - EnumSet possibleTargets, - Vec3Comparable solutionCoords, - int expectedSolutionCount) { + HollowsZone compassUsedZone, + EnumSet foundCrystals, + EnumSet possibleTargets, + Vec3Comparable solutionCoords, + int expectedSolutionCount + ) { EnumSet solutionTargets = CrystalWishingCompassSolver.getSolutionTargets( compassUsedZone, foundCrystals, possibleTargets, - solutionCoords); + solutionCoords + ); Assertions.assertEquals(expectedSolutionCount, solutionTargets.size()); return solutionTargets; } @@ -1003,7 +1070,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), new Vec3Comparable(minesOfDivanSolution), - 1); + 1 + ); // Assert Assertions.assertFalse(solutionTargets.contains(CompassTarget.CRYSTAL_NUCLEUS)); @@ -1021,7 +1089,8 @@ class CrystalWishingCompassSolverTest { EnumSet.of(Crystal.AMBER), possibleTargets, new Vec3Comparable(202, 72, 513), // upper left of Goblin Holdout - 2); + 2 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); @@ -1036,7 +1105,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), kingOdawaMinesOrNucleusCoordsInRemnants, - 3); + 3 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); @@ -1057,7 +1127,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, queenKingOdawaOrCityNucleusCoordsInMithrilDeposits, - 2); + 2 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); @@ -1067,7 +1138,7 @@ class CrystalWishingCompassSolverTest { @Test void solutionPossibleTargets_excludes_jungle_temple_from_other_zone_when_not_overlapping() { // Arrange - Vec3Comparable notOverlapping = new Vec3Comparable(202, 72, 513+110); // upper left of Goblin Holdout + Vec3Comparable notOverlapping = new Vec3Comparable(202, 72, 513 + 110); // upper left of Goblin Holdout EnumSet possibleTargets = EnumSet.allOf(CompassTarget.class); possibleTargets.remove(CompassTarget.ODAWA); @@ -1077,7 +1148,8 @@ class CrystalWishingCompassSolverTest { EnumSet.of(Crystal.AMBER), possibleTargets, notOverlapping, - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); @@ -1094,7 +1166,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), notOverlapping, - 0); + 0 + ); } @Test @@ -1111,7 +1184,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, notOverlapping, - 0); + 0 + ); } @Test @@ -1126,7 +1200,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(goblinHoldoutKingSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_KING)); @@ -1144,7 +1219,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(odawaSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.ODAWA)); @@ -1162,7 +1238,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(minesOfDivanSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.MINES_OF_DIVAN)); @@ -1182,7 +1259,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(jungleSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.JUNGLE_TEMPLE)); @@ -1201,7 +1279,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(goblinHoldoutQueenSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.GOBLIN_QUEEN)); @@ -1219,7 +1298,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), possibleTargets, new Vec3Comparable(precursorCitySolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.PRECURSOR_CITY)); @@ -1233,7 +1313,8 @@ class CrystalWishingCompassSolverTest { EnumSet.noneOf(Crystal.class), EnumSet.allOf(CompassTarget.class), new Vec3Comparable(magmaSolution), - 1); + 1 + ); // Assert Assertions.assertTrue(solutionTargets.contains(CompassTarget.BAL)); @@ -1269,11 +1350,13 @@ class CrystalWishingCompassSolverTest { HandleCompassResult expectedHandleCompassUseResult; SolverState expectedSolverState; - CompassUse(long timeIncrementMillis, - BlockPos playerPos, - ArrayList particles, - HandleCompassResult expectedHandleCompassUseResult, - SolverState expectedState) { + CompassUse( + long timeIncrementMillis, + BlockPos playerPos, + ArrayList particles, + HandleCompassResult expectedHandleCompassUseResult, + SolverState expectedState + ) { this.timeIncrementMillis = timeIncrementMillis; this.playerPos = playerPos; this.particles = particles != null ? particles : new ArrayList<>(); @@ -1296,7 +1379,11 @@ class CrystalWishingCompassSolverTest { Solution(ArrayList compassUses, Vec3i expectedSolutionCoords) { this.compassUses = compassUses; - this.expectedSolutionCoords = new Vec3i(expectedSolutionCoords.getX(), expectedSolutionCoords.getY(), expectedSolutionCoords.getZ()); + this.expectedSolutionCoords = new Vec3i( + expectedSolutionCoords.getX(), + expectedSolutionCoords.getY(), + expectedSolutionCoords.getZ() + ); } } diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml index 25209eae..61ee1966 100644 --- a/src/test/resources/log4j2-test.xml +++ b/src/test/resources/log4j2-test.xml @@ -2,13 +2,13 @@ - + - + -- cgit From a2ad09ee13cee2ef70268336b9df41368574f45a Mon Sep 17 00:00:00 2001 From: Roman / Nea Date: Thu, 7 Jul 2022 18:07:08 +0200 Subject: Added a calculator (#180) * Added a calculator * Remove stuff * also add t * Update Misc.java * On by default * add x for multiplication, fixed - not working and quick math solver Co-authored-by: nopo --- Update Notes/2.1.md | 1 + .../notenoughupdates/NotEnoughUpdates.java | 3 +- .../notenoughupdates/commands/Commands.java | 2 + .../commands/help/HelpCommand.java | 1 + .../commands/misc/CalculatorCommand.java | 72 +++++ .../notenoughupdates/events/SignSubmitEvent.java | 40 +++ .../notenoughupdates/listener/ChatListener.java | 8 + .../notenoughupdates/miscgui/SignCalculator.java | 107 ++++++++ .../notenoughupdates/mixins/MixinGuiEditSign.java | 50 ++++ .../options/seperateSections/Misc.java | 8 + .../notenoughupdates/util/Calculator.java | 300 +++++++++++++++++++++ src/main/resources/mixins.notenoughupdates.json | 7 +- .../notenoughupdates/util/CalculatorTest.java | 41 +++ 13 files changed, 638 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalculatorCommand.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/events/SignSubmitEvent.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/miscgui/SignCalculator.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiEditSign.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/util/Calculator.java create mode 100644 src/test/java/io/github/moulberry/notenoughupdates/util/CalculatorTest.java (limited to 'src/test/java') diff --git a/Update Notes/2.1.md b/Update Notes/2.1.md index 7a3a069f..81ead5ec 100644 --- a/Update Notes/2.1.md +++ b/Update Notes/2.1.md @@ -16,6 +16,7 @@ - Added wishing compass solver that shows target coordinates, structure, and integrates with Skytils waypoints - CraftyOldMiner - Improved metal detector logic to solve using a single position in most cases using known locations based on Keeper coordinates - CraftyOldMiner - Added support for official Hypixel wiki, can be toggled in /neu misc - DeDiamondPro +- Added a calculator (/neucalc help), that also works in the auction house / bazaar - nea89o - Added and fixed various things in the profile viewer: - [Added hotm tab](https://media.discordapp.net/attachments/659613194066722833/991115131507441724/unknown.png) - nopo - Big thanks to kwev1n for some math and jani for the texture diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index bd54dfba..d372602e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -57,6 +57,7 @@ import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.Custom import io.github.moulberry.notenoughupdates.miscfeatures.customblockzones.DwarvenMinesTextures; import io.github.moulberry.notenoughupdates.miscgui.CalendarOverlay; import io.github.moulberry.notenoughupdates.miscgui.InventoryStorageSelector; +import io.github.moulberry.notenoughupdates.miscgui.SignCalculator; import io.github.moulberry.notenoughupdates.mixins.AccessorMinecraft; import io.github.moulberry.notenoughupdates.options.NEUConfig; import io.github.moulberry.notenoughupdates.overlays.FuelBar; @@ -277,7 +278,7 @@ public class NotEnoughUpdates { MinecraftForge.EVENT_BUS.register(new ItemTooltipListener(this)); MinecraftForge.EVENT_BUS.register(new RenderListener(this)); MinecraftForge.EVENT_BUS.register(new OldAnimationChecker()); - MinecraftForge.EVENT_BUS.register(new CookieWarning()); + MinecraftForge.EVENT_BUS.register(new SignCalculator()); MinecraftForge.EVENT_BUS.register(navigation); if (Minecraft.getMinecraft().getResourceManager() instanceof IReloadableResourceManager) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java index 86411f4f..b152bc09 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java @@ -37,6 +37,7 @@ import io.github.moulberry.notenoughupdates.commands.help.LinksCommand; import io.github.moulberry.notenoughupdates.commands.help.SettingsCommand; import io.github.moulberry.notenoughupdates.commands.help.StorageViewerWhyCommand; import io.github.moulberry.notenoughupdates.commands.misc.AhCommand; +import io.github.moulberry.notenoughupdates.commands.misc.CalculatorCommand; import io.github.moulberry.notenoughupdates.commands.misc.CalendarCommand; import io.github.moulberry.notenoughupdates.commands.misc.CosmeticsCommand; import io.github.moulberry.notenoughupdates.commands.misc.CustomizeCommand; @@ -91,6 +92,7 @@ public class Commands { ClientCommandHandler.instance.registerCommand(new ScreenCommand("neuoverlay", NEUOverlayPlacements::new)); //ClientCommandHandler.instance.registerCommand(new ScreenCommand("neututorial", NeuTutorial::new)); ClientCommandHandler.instance.registerCommand(new AhCommand()); + ClientCommandHandler.instance.registerCommand(new CalculatorCommand()); ClientCommandHandler.instance.registerCommand(new CalendarCommand()); // Fairy Soul Commands diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java index ba49221e..a52fcd1d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/help/HelpCommand.java @@ -52,6 +52,7 @@ public class HelpCommand extends ClientCommandBase { "\u00a76/neuah \u00a7r\u00a77- Opens neu's custom ah GUI.", "\u00a76/neumap \u00a7r\u00a77- Opens the dungeon map GUI.", "\u00a76/neucalendar \u00a7r\u00a77- Opens neu's custom calendar GUI.", + "\u00a76/neucalc \u00a7r\u00a77- Run calculations.", "", "\u00a76\u00a7lOld commands:", "\u00a76/peek \u00a7b?{user} \u00a72\u2D35 \u00a7r\u00a77- Shows quickly stats for a user.", diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalculatorCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalculatorCommand.java new file mode 100644 index 00000000..e73e3b32 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/CalculatorCommand.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.commands.misc; + +import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; +import io.github.moulberry.notenoughupdates.util.Calculator; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public class CalculatorCommand extends ClientCommandBase { + public CalculatorCommand() { + super("neucalc"); + } + + @Override + public List getCommandAliases() { + return Arrays.asList("neucalculator"); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) throws CommandException { + if ((args.length == 1 && Objects.equals(args[0], "help")) || args.length == 0) { + sender.addChatMessage(new ChatComponentText( + "\n§e[NEU] §5Its a calculator.\n" + + "§eFor Example §b/neucalc 3m*7k§e.\n" + + "§eYou can also use suffixes (k, m, b, t, s)§e.\n" + + "§eThe \"s\" suffix acts as 64.\n" + + "§eTurn on Sign Calculator in /neu misc to also support this in sign popups.\n")); + return; + } + String source = String.join(" ", args); + try { + BigDecimal calculate = Calculator.calculate(source); + sender.addChatMessage(new ChatComponentText( + EnumChatFormatting.YELLOW + "[NEU] " + EnumChatFormatting.WHITE + source + " = " + EnumChatFormatting.GREEN + + calculate.toPlainString() + )); + } catch (Calculator.CalculatorException e) { + sender.addChatMessage(new ChatComponentText( + EnumChatFormatting.YELLOW + "[NEU] " + EnumChatFormatting.RED + "Error during calculation: " + + e.getMessage() + "\n" + + EnumChatFormatting.WHITE + source.substring(0, e.getOffset()) + EnumChatFormatting.DARK_RED + + source.substring(e.getOffset(), e.getLength() + e.getOffset()) + EnumChatFormatting.GRAY + + source.substring(e.getLength() + e.getOffset()) + )); + } + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/events/SignSubmitEvent.java b/src/main/java/io/github/moulberry/notenoughupdates/events/SignSubmitEvent.java new file mode 100644 index 00000000..9bc7b8b0 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/events/SignSubmitEvent.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.events; + +import net.minecraft.client.gui.inventory.GuiEditSign; + +public class SignSubmitEvent extends NEUEvent { + public final GuiEditSign sign; + public final String[] lines; + + public SignSubmitEvent(GuiEditSign sign, String[] hehe) { + this.sign = sign; + this.lines = hehe; + } + + public GuiEditSign getSign() { + return sign; + } + + public String[] getLines() { + return lines; + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java index 0aade4b0..457042ee 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java @@ -35,6 +35,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -213,6 +214,13 @@ public class ChatListener { SlayerOverlay.unloadOverlayTimer = System.currentTimeMillis(); } else if (unformatted.startsWith("You consumed a Booster Cookie!")) { CookieWarning.resetNotification(); + } else if (unformatted.startsWith("QUICK MATHS! Solve:")) { + if (Math.random() < 0.2) { + ClientCommandHandler.instance.executeCommand( + Minecraft.getMinecraft().thePlayer, + "/neucalc " + unformatted.substring("QUICK MATHS! Solve: ".length()) + ); + } } if (e.message.getFormattedText().contains( EnumChatFormatting.YELLOW + "Visit the Auction House to collect your item!")) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/SignCalculator.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/SignCalculator.java new file mode 100644 index 00000000..115458c9 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/SignCalculator.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.miscgui; + +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.events.SignSubmitEvent; +import io.github.moulberry.notenoughupdates.mixins.AccessorGuiEditSign; +import io.github.moulberry.notenoughupdates.util.Calculator; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiEditSign; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.math.BigDecimal; +import java.util.Objects; + +public class SignCalculator { + + String lastSource = null; + BigDecimal lastResult = null; + Calculator.CalculatorException lastException = null; + + private boolean isEnabled() { + return NotEnoughUpdates.INSTANCE.config.misc.calculationMode != 0; + } + + @SubscribeEvent + public void onSignDrawn(GuiScreenEvent.DrawScreenEvent.Post event) { + if (!(event.gui instanceof GuiEditSign)) + return; + if (!isEnabled()) return; + GuiEditSign guiEditSign = (GuiEditSign) event.gui; + TileEntitySign tileSign = ((AccessorGuiEditSign) guiEditSign).getTileSign(); + if (!tileSign.signText[1].getUnformattedText().equals("^^^^^^^^^^^^^^^")) return; + refresh(tileSign.signText[0].getUnformattedText()); + Utils.drawStringCentered( + getRenderedString(), + Minecraft.getMinecraft().fontRendererObj, + guiEditSign.width / 2F, + guiEditSign.height / 4F - 120, + false, + 0x808080FF + ); + } + + @SubscribeEvent + public void onSignSubmitted(SignSubmitEvent event) { + if (!isEnabled()) return; + if (Objects.equals(event.lines[1], "^^^^^^^^^^^^^^^")) { + refresh(event.lines[0]); + if (lastResult != null) { + event.lines[0] = lastResult.toPlainString(); + } + } + } + + public String getRenderedString() { + if (lastResult != null) { + String lr = lastResult.toPlainString(); + if (Minecraft.getMinecraft().fontRendererObj.getStringWidth(lr) > 90) { + return EnumChatFormatting.WHITE + lastSource + " = " + EnumChatFormatting.RED + "Result too long"; + } + return EnumChatFormatting.WHITE + lastSource + " = " + EnumChatFormatting.GREEN + lr; + } else if (lastException != null) { + return EnumChatFormatting.RED + lastException.getMessage(); + } + return EnumChatFormatting.RED + "No calculation has been done."; + } + + private void refresh(String source) { + if (Objects.equals(source, lastSource)) return; + lastSource = source; + int calculationMode = NotEnoughUpdates.INSTANCE.config.misc.calculationMode; + if (source.isEmpty() || calculationMode == 0 || (calculationMode == 1 && !source.startsWith("!"))) { + lastResult = null; + lastException = null; + return; + } + try { + lastResult = Calculator.calculate(calculationMode == 1 ? source.substring(1) : source); + lastException = null; + } catch (Calculator.CalculatorException ex) { + lastException = ex; + lastResult = null; + } + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiEditSign.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiEditSign.java new file mode 100644 index 00000000..bfdf05ab --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiEditSign.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.mixins; + +import io.github.moulberry.notenoughupdates.events.SignSubmitEvent; +import net.minecraft.client.gui.inventory.GuiEditSign; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(GuiEditSign.class) +public class MixinGuiEditSign { + + @Redirect(method = "onGuiClosed", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/tileentity/TileEntitySign;signText:[Lnet/minecraft/util/IChatComponent;")) + public IChatComponent[] onOnGuiClosed(TileEntitySign instance) { + String[] x = new String[4]; + for (int i = 0; i < 4; i++) { + x[i] = instance.signText[i].getUnformattedText(); + } + SignSubmitEvent signSubmitEvent = new SignSubmitEvent((GuiEditSign) (Object) this, x); + signSubmitEvent.post(); + IChatComponent[] arr = new IChatComponent[4]; + for (int i = 0; i < 4; i++) { + arr[i] = new ChatComponentText(signSubmitEvent.lines[i]); + } + return arr; + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java index c0f4e8c9..08ae5745 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java @@ -215,4 +215,12 @@ public class Misc { @ConfigEditorBoolean public boolean warpTwice = true; + @Expose + @ConfigOption( + name = "Sign Calculator", + desc = "§7Replace calculations like §9\"1+2\"§7 with the calculation result in sign popups (AH/BZ)" + ) + @ConfigEditorDropdown(values = {"Off", "Enabled with ! Prefix", "Always enabled"}) + public int calculationMode = 2; + } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Calculator.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Calculator.java new file mode 100644 index 00000000..45d7c051 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Calculator.java @@ -0,0 +1,300 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.util; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.List; +import java.util.NoSuchElementException; + +public class Calculator { + public static BigDecimal calculate(String source) throws CalculatorException { + return evaluate(shuntingYard(lex(source))); + } + + /// + public enum TokenType { + NUMBER, BINOP, LPAREN, RPAREN, POSTOP + } + + public static class Token { + public TokenType type; + String operatorValue; + long numericValue; + int exponent; + int tokenStart; + int tokenLength; + } + + static String binops = "+-*/x"; + static String postops = "mkbts"; + static String digits = "0123456789"; + + static void readDigitsInto(Token token, String source, boolean decimals) { + int startIndex = token.tokenStart + token.tokenLength; + for (int j = 0; j + startIndex < source.length(); j++) { + char d = source.charAt(j + startIndex); + int d0 = digits.indexOf(d); + if (d0 != -1) { + if (decimals) + token.exponent--; + token.numericValue *= 10; + token.numericValue += d0; + token.tokenLength += 1; + } else { + return; + } + } + } + + public static class CalculatorException extends Exception { + int offset, length; + + public CalculatorException(String message, int offset, int length) { + super(message); + this.offset = offset; + this.length = length; + } + + public int getLength() { + return length; + } + + public int getOffset() { + return offset; + } + } + + public static List lex(String source) throws CalculatorException { + List tokens = new ArrayList<>(); + for (int i = 0; i < source.length(); ) { + char c = source.charAt(i); + if (Character.isWhitespace(c)) { + i++; + continue; + } + Token token = new Token(); + token.tokenStart = i; + if (binops.indexOf(c) != -1) { + token.tokenLength = 1; + token.type = TokenType.BINOP; + token.operatorValue = c + ""; + } else if (postops.indexOf(c) != -1) { + token.tokenLength = 1; + token.type = TokenType.POSTOP; + token.operatorValue = c + ""; + } else if (c == ')') { + token.tokenLength = 1; + token.type = TokenType.RPAREN; + token.operatorValue = ")"; + } else if (c == '(') { + token.tokenLength = 1; + token.type = TokenType.LPAREN; + token.operatorValue = "("; + } else if ('.' == c) { + token.tokenLength = 1; + token.type = TokenType.NUMBER; + readDigitsInto(token, source, true); + if (token.tokenLength == 1) { + throw new CalculatorException("Invalid number literal", i, 1); + } + } else if (digits.indexOf(c) != -1) { + token.type = TokenType.NUMBER; + readDigitsInto(token, source, false); + if (i + token.tokenLength < source.length()) { + char p = source.charAt(i + token.tokenLength); + if ('.' == p) { + token.tokenLength++; + readDigitsInto(token, source, true); + } + } + } else { + throw new CalculatorException("Unknown thing " + c, i, 1); + } + tokens.add(token); + i += token.tokenLength; + } + return tokens; + } + /// + + /// + static int getPrecedence(Token token) throws CalculatorException { + switch (token.operatorValue.intern()) { + case "+": + case "-": + return 0; + case "*": + case "/": + case "x": + return 1; + } + throw new CalculatorException("Unknown operator " + token.operatorValue, token.tokenStart, token.tokenLength); + } + + public static List shuntingYard(List toShunt) throws CalculatorException { + // IT'S SHUNTING TIME + // This is an implementation of the shunting yard algorithm + + Deque op = new ArrayDeque<>(); + List out = new ArrayList<>(); + + for (Token currentlyShunting : toShunt) { + switch (currentlyShunting.type) { + case NUMBER: + out.add(currentlyShunting); + break; + case BINOP: + int p = getPrecedence(currentlyShunting); + while (!op.isEmpty()) { + Token l = op.peek(); + if (l.type == TokenType.LPAREN) + break; + assert (l.type == TokenType.BINOP); + int pl = getPrecedence(l); + if (pl > p) { + out.add(op.pop()); + } else { + break; + } + } + op.push(currentlyShunting); + break; + case LPAREN: + op.push(currentlyShunting); + break; + case RPAREN: + while (1 > 0) { + if (op.isEmpty()) + throw new CalculatorException( + "Unbalanced right parenthesis", + currentlyShunting.tokenStart, + currentlyShunting.tokenLength + ); + Token l = op.pop(); + if (l.type == TokenType.LPAREN) { + break; + } + out.add(l); + } + break; + case POSTOP: + out.add(currentlyShunting); + break; + } + } + while (!op.isEmpty()) { + Token l = op.pop(); + if (l.type == TokenType.LPAREN) + throw new CalculatorException("Unbalanced left parenthesis", l.tokenStart, l.tokenLength); + out.add(l); + } + return out; + } + + /// + + /// + + public static BigDecimal evaluate(List rpnTokens) throws CalculatorException { + Deque values = new ArrayDeque<>(); + try { + for (Token command : rpnTokens) { + switch (command.type) { + case NUMBER: + values.push(new BigDecimal(command.numericValue).scaleByPowerOfTen(command.exponent)); + break; + case BINOP: + BigDecimal right = values.pop().setScale(2, RoundingMode.HALF_UP); + BigDecimal left = values.pop().setScale(2, RoundingMode.HALF_UP); + switch (command.operatorValue.intern()) { + case "x": + case "*": + values.push(left.multiply(right).setScale(2, RoundingMode.HALF_UP)); + break; + case "/": + try { + values.push(left.divide(right, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); + } catch (ArithmeticException e) { + throw new CalculatorException("Encountered division by 0", command.tokenStart, command.tokenLength); + } + break; + case "+": + values.push(left.add(right).setScale(2, RoundingMode.HALF_UP)); + break; + case "-": + values.push(left.subtract(right).setScale(2, RoundingMode.HALF_UP)); + break; + default: + throw new CalculatorException( + "Unknown operation " + command.operatorValue, + command.tokenStart, + command.tokenLength + ); + } + break; + case LPAREN: + case RPAREN: + throw new CalculatorException( + "Did not expect unshunted token in RPN", + command.tokenStart, + command.tokenLength + ); + case POSTOP: + BigDecimal p = values.pop(); + switch (command.operatorValue.intern()) { + case "s": + values.push(p.multiply(new BigDecimal(64)).setScale(2, RoundingMode.HALF_UP)); + break; + case "k": + values.push(p.multiply(new BigDecimal(1_000)).setScale(2, RoundingMode.HALF_UP)); + break; + case "m": + values.push(p.multiply(new BigDecimal(1_000_000)).setScale(2, RoundingMode.HALF_UP)); + break; + case "b": + values.push(p.multiply(new BigDecimal(1_000_000_000)).setScale(2, RoundingMode.HALF_UP)); + break; + case "t": + values.push(p.multiply(new BigDecimal("1000000000000")).setScale(2, RoundingMode.HALF_UP)); + break; + default: + throw new CalculatorException( + "Unknown operation " + command.operatorValue, + command.tokenStart, + command.tokenLength + ); + } + break; + } + } + BigDecimal peek = values.pop(); + return peek.stripTrailingZeros(); + } catch (NoSuchElementException e) { + throw new CalculatorException("Unfinished expression", 0, 0); + } + } + + /// + +} diff --git a/src/main/resources/mixins.notenoughupdates.json b/src/main/resources/mixins.notenoughupdates.json index 63b8211b..8b1d4559 100644 --- a/src/main/resources/mixins.notenoughupdates.json +++ b/src/main/resources/mixins.notenoughupdates.json @@ -46,5 +46,10 @@ "MixinWorld", "MixinWorldClient" ], - "client": ["AccessorGuiContainer", "AccessorGuiEditSign", "AccessorMinecraft"] + "client": [ + "AccessorGuiContainer", + "AccessorGuiEditSign", + "AccessorMinecraft", + "MixinGuiEditSign" + ] } diff --git a/src/test/java/io/github/moulberry/notenoughupdates/util/CalculatorTest.java b/src/test/java/io/github/moulberry/notenoughupdates/util/CalculatorTest.java new file mode 100644 index 00000000..66ba5442 --- /dev/null +++ b/src/test/java/io/github/moulberry/notenoughupdates/util/CalculatorTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.util; + +import java.math.BigDecimal; +import java.util.List; + +public class CalculatorTest { + public static void main(String[] args) throws Calculator.CalculatorException { + List lex = Calculator.lex("10k + 3 * 4m"); + List shunted = Calculator.shuntingYard(lex); + for (Calculator.Token rawToken : shunted) { + System.out.printf( + "%s(%s)", + rawToken.type, + rawToken.operatorValue == null ? rawToken.numericValue + " * 10 ^ " + rawToken.exponent : rawToken.operatorValue + ); + } + System.out.println(); + BigDecimal evaluate = Calculator.evaluate(shunted); + System.out.println("Eval: " + evaluate); + } + +} -- cgit