// Path: src/main/java/myessentials/entities/api/ChunkPos.java
// public class ChunkPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int z;
// 
//     public ChunkPos(int dim, int x, int z) {
//         this.dim = dim;
//         this.x = x;
//         this.z = z;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.chunkpos", x, z, dim);
//     }
// 
//     public NBTTagCompound toNBTTagCompound() {
//         NBTTagCompound tag = new NBTTagCompound();
//         tag.setInteger("x", x);
//         tag.setInteger("z", z);
//         return tag;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj instanceof ChunkPos) {
//             ChunkPos other = (ChunkPos) obj;
//             return other.x == x && other.z == z && other.dim == dim;
//         } else {
//             return super.equals(obj);
//         }
//     }
// }
// 
// Path: src/test/java/myessentials/test/MECTest.java
// public class MECTest extends BaseTest {
// 
//     @Before
//     public void initConfig() {
//         TestConfig.instance.init(configFile, Constants.MOD_ID);
//     }
// 
// }
// 
// Path: src/main/java/myessentials/utils/WorldUtils.java
// public class WorldUtils {
// 
//     private WorldUtils() {
//     }
// 
//     /**
//      * Transforms a box made out of actual coordinates to a list of all the chunks that this box is in
//      */
//     public static List<ChunkPos> getChunksInBox(int dim, int minX, int minZ, int maxX, int maxZ) {
//         List<ChunkPos> list = new ArrayList<ChunkPos>();
//         for (int i = minX >> 4; i <= maxX >> 4; i++) {
//             for (int j = minZ >> 4; j <= maxZ >> 4; j++) {
//                 list.add(new ChunkPos(dim, i, j));
//             }
//         }
//         return list;
//     }
// 
//     /**
//      * Drops the specified itemstack in the worls as an EntityItem
//      */
//     public static void dropAsEntity(World world, int x, int y, int z, ItemStack itemStack) {
//         if (itemStack == null) {
//             return;
//         }
//         double f = 0.7D;
//         double dx = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
//         double dy = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
//         double dz = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
// 
//         EntityItem entityItem = new EntityItem(world, x + dx, y + dy, z + dz, itemStack);
//         world.spawnEntityInWorld(entityItem);
//     }
// 
//     /**
//      * Returns the first block from top to bottom that is considered not opaque
//      */
//     public static int getMaxHeightWithSolid(int dim, int x, int z) {
//         World world = MinecraftServer.getServer().worldServerForDimension(dim);
//         int y = world.getActualHeight();
//         while(!world.getBlock(x, y, z).getMaterial().isOpaque() && y > 0)
//             y--;
//         return y;
//     }
// }


import myessentials.entities.api.ChunkPos;
import myessentials.test.MECTest;
import myessentials.utils.WorldUtils;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
package myessentials.test.utils;



public class WorldUtilsTest extends MECTest {

    @Test
    public void shouldTransformWorldCoordsIntoChunkCoords() {
        List<ChunkPos> expectedValues = new ArrayList<ChunkPos>();
        expectedValues.add(new ChunkPos(0, 0, 0));
        expectedValues.add(new ChunkPos(0, 0, 1));
        expectedValues.add(new ChunkPos(0, 0, 2));
        expectedValues.add(new ChunkPos(0, 0, 3));
        expectedValues.add(new ChunkPos(0, 0, 4));

        List<ChunkPos> chunks = WorldUtils.getChunksInBox(0, 10, 10, 10, 64);
        Assert.assertEquals(expectedValues.size(), chunks.size());
// Path: src/main/java/myessentials/entities/api/ChunkPos.java
// public class ChunkPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int z;
// 
//     public ChunkPos(int dim, int x, int z) {
//         this.dim = dim;
//         this.x = x;
//         this.z = z;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.chunkpos", x, z, dim);
//     }
// 
//     public NBTTagCompound toNBTTagCompound() {
//         NBTTagCompound tag = new NBTTagCompound();
//         tag.setInteger("x", x);
//         tag.setInteger("z", z);
//         return tag;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj instanceof ChunkPos) {
//             ChunkPos other = (ChunkPos) obj;
//             return other.x == x && other.z == z && other.dim == dim;
//         } else {
//             return super.equals(obj);
//         }
//     }
// }
// 
// Path: src/test/java/myessentials/test/MECTest.java
// public class MECTest extends BaseTest {
// 
//     @Before
//     public void initConfig() {
//         TestConfig.instance.init(configFile, Constants.MOD_ID);
//     }
// 
// }
// 
// Path: src/main/java/myessentials/utils/WorldUtils.java
// public class WorldUtils {
// 
//     private WorldUtils() {
//     }
// 
//     /**
//      * Transforms a box made out of actual coordinates to a list of all the chunks that this box is in
//      */
//     public static List<ChunkPos> getChunksInBox(int dim, int minX, int minZ, int maxX, int maxZ) {
//         List<ChunkPos> list = new ArrayList<ChunkPos>();
//         for (int i = minX >> 4; i <= maxX >> 4; i++) {
//             for (int j = minZ >> 4; j <= maxZ >> 4; j++) {
//                 list.add(new ChunkPos(dim, i, j));
//             }
//         }
//         return list;
//     }
// 
//     /**
//      * Drops the specified itemstack in the worls as an EntityItem
//      */
//     public static void dropAsEntity(World world, int x, int y, int z, ItemStack itemStack) {
//         if (itemStack == null) {
//             return;
//         }
//         double f = 0.7D;
//         double dx = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
//         double dy = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
//         double dz = world.rand.nextFloat() * f + (1.0D - f) * 0.5D;
// 
//         EntityItem entityItem = new EntityItem(world, x + dx, y + dy, z + dz, itemStack);
//         world.spawnEntityInWorld(entityItem);
//     }
// 
//     /**
//      * Returns the first block from top to bottom that is considered not opaque
//      */
//     public static int getMaxHeightWithSolid(int dim, int x, int z) {
//         World world = MinecraftServer.getServer().worldServerForDimension(dim);
//         int y = world.getActualHeight();
//         while(!world.getBlock(x, y, z).getMaterial().isOpaque() && y > 0)
//             y--;
//         return y;
//     }
// }


// Path: src/test/java/myessentials/test/utils/WorldUtilsTest.java
import myessentials.entities.api.ChunkPos;
import myessentials.test.MECTest;
import myessentials.utils.WorldUtils;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;

package myessentials.test.utils;



public class WorldUtilsTest extends MECTest {

    @Test
    public void shouldTransformWorldCoordsIntoChunkCoords() {
        List<ChunkPos> expectedValues = new ArrayList<ChunkPos>();
        expectedValues.add(new ChunkPos(0, 0, 0));
        expectedValues.add(new ChunkPos(0, 0, 1));
        expectedValues.add(new ChunkPos(0, 0, 2));
        expectedValues.add(new ChunkPos(0, 0, 3));
        expectedValues.add(new ChunkPos(0, 0, 4));

        List<ChunkPos> chunks = WorldUtils.getChunksInBox(0, 10, 10, 10, 64);
        Assert.assertEquals(expectedValues.size(), chunks.size());
        for(int i = 0; i < expectedValues.size(); i++) {