2012-12-09 22:13:38 +01:00
|
|
|
package org.bukkit;
|
|
|
|
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
import static org.hamcrest.Matchers.*;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
2013-11-04 14:07:38 +01:00
|
|
|
import net.minecraft.server.BlockFalling;
|
2012-12-14 09:02:02 +01:00
|
|
|
import net.minecraft.server.BlockFire;
|
|
|
|
import net.minecraft.server.Item;
|
|
|
|
import net.minecraft.server.ItemFood;
|
|
|
|
import net.minecraft.server.ItemRecord;
|
2017-03-23 23:18:32 +01:00
|
|
|
import net.minecraft.server.TileEntityFurnace;
|
2012-12-09 22:13:38 +01:00
|
|
|
|
2012-12-17 08:31:41 +01:00
|
|
|
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
2012-12-14 09:02:02 +01:00
|
|
|
import org.bukkit.support.AbstractTestingBase;
|
|
|
|
import org.bukkit.support.Util;
|
|
|
|
import org.junit.BeforeClass;
|
2012-12-09 22:13:38 +01:00
|
|
|
import org.junit.Test;
|
|
|
|
import org.junit.runner.RunWith;
|
|
|
|
import org.junit.runners.Parameterized;
|
|
|
|
import org.junit.runners.Parameterized.Parameter;
|
|
|
|
import org.junit.runners.Parameterized.Parameters;
|
|
|
|
|
2012-12-14 09:02:02 +01:00
|
|
|
import com.google.common.collect.Lists;
|
2014-11-25 22:32:16 +01:00
|
|
|
import java.util.Map;
|
|
|
|
import net.minecraft.server.Block;
|
2013-11-04 14:07:38 +01:00
|
|
|
import net.minecraft.server.Blocks;
|
|
|
|
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
2016-07-08 04:51:32 +02:00
|
|
|
import org.bukkit.enchantments.EnchantmentTarget;
|
2012-12-14 09:02:02 +01:00
|
|
|
|
2012-12-09 22:13:38 +01:00
|
|
|
@RunWith(Parameterized.class)
|
2012-12-14 09:02:02 +01:00
|
|
|
public class PerMaterialTest extends AbstractTestingBase {
|
2014-11-25 22:32:16 +01:00
|
|
|
private static Map<Block, Integer> fireValues;
|
2012-12-14 09:02:02 +01:00
|
|
|
|
|
|
|
@BeforeClass
|
|
|
|
public static void getFireValues() {
|
2015-05-05 22:43:47 +02:00
|
|
|
fireValues = Util.getInternalState(BlockFire.class, Blocks.FIRE, "flameChances");
|
2012-12-09 22:13:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Parameters(name= "{index}: {0}")
|
|
|
|
public static List<Object[]> data() {
|
2012-12-14 09:02:02 +01:00
|
|
|
List<Object[]> list = Lists.newArrayList();
|
2012-12-09 22:13:38 +01:00
|
|
|
for (Material material : Material.values()) {
|
|
|
|
list.add(new Object[] {material});
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Parameter public Material material;
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isSolid() {
|
|
|
|
if (material == Material.AIR) {
|
|
|
|
assertFalse(material.isSolid());
|
|
|
|
} else if (material.isBlock()) {
|
2016-02-29 22:32:46 +01:00
|
|
|
assertThat(material.isSolid(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isSolid()));
|
2012-12-09 22:13:38 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.isSolid());
|
|
|
|
}
|
|
|
|
}
|
2012-12-14 09:02:02 +01:00
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isEdible() {
|
2013-11-04 14:07:38 +01:00
|
|
|
assertThat(material.isEdible(), is(CraftMagicNumbers.getItem(material) instanceof ItemFood));
|
2012-12-14 09:02:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isRecord() {
|
2013-11-04 14:07:38 +01:00
|
|
|
assertThat(material.isRecord(), is(CraftMagicNumbers.getItem(material) instanceof ItemRecord));
|
2012-12-14 09:02:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void maxDurability() {
|
2015-01-25 12:59:37 +01:00
|
|
|
if (INVALIDATED_MATERIALS.contains(material)) return;
|
|
|
|
|
2012-12-14 09:02:02 +01:00
|
|
|
if (material == Material.AIR) {
|
|
|
|
assertThat((int) material.getMaxDurability(), is(0));
|
2013-11-04 14:07:38 +01:00
|
|
|
} else if (material.isBlock()){
|
|
|
|
Item item = CraftMagicNumbers.getItem(material);
|
|
|
|
assertThat((int) material.getMaxDurability(), is(item.getMaxDurability()));
|
2012-12-14 09:02:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void maxStackSize() {
|
2015-01-25 12:59:37 +01:00
|
|
|
if (INVALIDATED_MATERIALS.contains(material)) return;
|
|
|
|
|
2012-12-17 08:31:41 +01:00
|
|
|
final ItemStack bukkit = new ItemStack(material);
|
|
|
|
final CraftItemStack craft = CraftItemStack.asCraftCopy(bukkit);
|
2012-12-14 09:02:02 +01:00
|
|
|
if (material == Material.AIR) {
|
2012-12-17 08:31:41 +01:00
|
|
|
final int MAX_AIR_STACK = 0 /* Why can't I hold all of these AIR? */;
|
|
|
|
assertThat(material.getMaxStackSize(), is(MAX_AIR_STACK));
|
|
|
|
assertThat(bukkit.getMaxStackSize(), is(MAX_AIR_STACK));
|
|
|
|
assertThat(craft.getMaxStackSize(), is(MAX_AIR_STACK));
|
2012-12-14 09:02:02 +01:00
|
|
|
} else {
|
2013-11-04 14:07:38 +01:00
|
|
|
assertThat(material.getMaxStackSize(), is(CraftMagicNumbers.getItem(material).getMaxStackSize()));
|
2012-12-17 08:31:41 +01:00
|
|
|
assertThat(bukkit.getMaxStackSize(), is(material.getMaxStackSize()));
|
|
|
|
assertThat(craft.getMaxStackSize(), is(material.getMaxStackSize()));
|
2012-12-14 09:02:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isTransparent() {
|
|
|
|
if (material == Material.AIR) {
|
|
|
|
assertTrue(material.isTransparent());
|
|
|
|
} else if (material.isBlock()) {
|
2016-02-29 22:32:46 +01:00
|
|
|
assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight())));
|
2012-12-14 09:02:02 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.isTransparent());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isFlammable() {
|
|
|
|
if (material != Material.AIR && material.isBlock()) {
|
2016-02-29 22:32:46 +01:00
|
|
|
assertThat(material.isFlammable(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isBurnable()));
|
2012-12-14 09:02:02 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.isFlammable());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void isBurnable() {
|
|
|
|
if (material.isBlock()) {
|
2014-11-25 22:32:16 +01:00
|
|
|
Block block = CraftMagicNumbers.getBlock(material);
|
|
|
|
assertThat(material.isBurnable(), is(fireValues.containsKey(block) && fireValues.get(block) > 0));
|
2012-12-14 09:02:02 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.isBurnable());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-23 23:18:32 +01:00
|
|
|
@Test
|
|
|
|
public void isFuel() {
|
|
|
|
assertThat(material.isFuel(), is(TileEntityFurnace.isFuel(new net.minecraft.server.ItemStack(CraftMagicNumbers.getItem(material)))));
|
|
|
|
}
|
|
|
|
|
2012-12-14 09:02:02 +01:00
|
|
|
@Test
|
|
|
|
public void isOccluding() {
|
|
|
|
if (material.isBlock()) {
|
2016-02-29 22:32:46 +01:00
|
|
|
assertThat(material.isOccluding(), is(CraftMagicNumbers.getBlock(material).isOccluding(CraftMagicNumbers.getBlock(material).getBlockData())));
|
2012-12-14 09:02:02 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.isOccluding());
|
|
|
|
}
|
|
|
|
}
|
2013-02-15 02:38:34 +01:00
|
|
|
|
|
|
|
@Test
|
|
|
|
public void hasGravity() {
|
|
|
|
if (material.isBlock()) {
|
2013-11-04 14:07:38 +01:00
|
|
|
assertThat(material.hasGravity(), is(CraftMagicNumbers.getBlock(material) instanceof BlockFalling));
|
2013-02-15 02:38:34 +01:00
|
|
|
} else {
|
|
|
|
assertFalse(material.hasGravity());
|
|
|
|
}
|
|
|
|
}
|
2016-07-08 04:51:32 +02:00
|
|
|
|
|
|
|
@Test
|
|
|
|
public void usesDurability() {
|
|
|
|
if (!material.isBlock()) {
|
|
|
|
assertThat(EnchantmentTarget.BREAKABLE.includes(material), is(CraftMagicNumbers.getItem(material).usesDurability()));
|
|
|
|
} else {
|
|
|
|
assertFalse(EnchantmentTarget.BREAKABLE.includes(material));
|
|
|
|
}
|
|
|
|
}
|
2012-12-09 22:13:38 +01:00
|
|
|
}
|