Daniel Mills 4207330dcf Revert "Revert "Block Compat""
This reverts commit 05ab44d50b9048ddf69e27afc803dad56ab06526.
2020-08-06 16:02:01 -04:00

218 lines
5.9 KiB
Java

package com.volmit.iris.util;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension;
public class B
{
private static final BlockData AIR = Material.AIR.createBlockData();
private static final KMap<String, BlockData> bdc = new KMap<>();
private static final KList<String> nulls = new KList<>();
private static final IrisDimension defaultCompat = new IrisDimension();
public static BlockData get(String bd)
{
return getBlockData(bd);
}
public static Material mat(String bd)
{
return getBlockData(bd).getMaterial();
}
public static BlockData getBlockData(String bd)
{
return getBlockData(bd, defaultCompat);
}
public static BlockData getBlockData(String bdxf, IrisDimension resolver)
{
try
{
String bd = bdxf.trim();
if(bdc.containsKey(bd))
{
return bdc.get(bd).clone();
}
BlockData bdx = parseBlockData(bd);
if(bdx == null)
{
bdx = resolver.resolve(bd);
}
if(bdx == null)
{
Iris.warn("Unknown Block Data '" + bd + "'");
nulls.add(bd);
return bdx;
}
bdc.put(bd, bdx);
return bdx;
}
catch(Throwable e)
{
Iris.warn("Unknown Block Data '" + bdxf + "'");
}
return AIR;
}
public static BlockData parseBlockData(String ix)
{
try
{
BlockData bx = Bukkit.createBlockData(ix);
if(bx != null)
{
return bx;
}
}
catch(Throwable e)
{
}
String i = ix.toUpperCase().trim();
i = i.equals("WOOL") ? "WHITE_WOOL" : i;
i = i.equals("CONCRETE") ? "WHITE_CONCRETE" : i;
try
{
Material m = Material.valueOf(i);
return m.createBlockData();
}
catch(Throwable e)
{
}
return AIR;
}
public static boolean isLit(BlockData mat)
{
return isLit(mat.getMaterial());
}
public static boolean isLit(Material mat)
{
if(mat.equals(B.mat("GLOWSTONE")) || mat.equals(B.mat("TORCH")) || mat.equals(Material.REDSTONE_TORCH) || mat.equals(B.mat("SOUL_TORCH")) || mat.equals(Material.REDSTONE_WALL_TORCH) || mat.equals(Material.WALL_TORCH) || mat.equals(B.mat("SOUL_WALL_TORCH")) || mat.equals(B.mat("LANTERN")) || mat.equals(Material.JACK_O_LANTERN) || mat.equals(Material.REDSTONE_LAMP) || mat.equals(Material.MAGMA_BLOCK) || mat.equals(B.mat("SEA_LANTERN")) || mat.equals(B.mat("SOUL_LANTERN")) || mat.equals(Material.FIRE) || mat.equals(B.mat("SOUL_FIRE")) || mat.equals(B.mat("SEA_PICKLE")) || mat.equals(Material.BREWING_STAND) || mat.equals(Material.REDSTONE_ORE))
{
return true;
}
return false;
}
public static boolean canPlaceOnto(Material mat, Material onto)
{
if(onto.equals(Material.AIR) || onto.equals(B.mat("CAVE_AIR")))
{
return false;
}
if(onto.equals(Material.GRASS_BLOCK) && mat.equals(Material.DEAD_BUSH))
{
return false;
}
if(onto.equals(Material.GRASS_PATH))
{
if(!mat.isSolid())
{
return false;
}
}
if(onto.equals(Material.STONE) || onto.equals(Material.GRAVEL) || onto.equals(Material.GRAVEL) || onto.equals(Material.ANDESITE) || onto.equals(Material.GRANITE) || onto.equals(Material.DIORITE) || onto.equals(B.mat("BLACKSTONE")) || onto.equals(B.mat("BASALT")))
{
if(mat.equals(Material.POPPY) || mat.equals(Material.DANDELION) || mat.equals(B.mat("CORNFLOWER")) || mat.equals(Material.ORANGE_TULIP) || mat.equals(Material.PINK_TULIP) || mat.equals(Material.RED_TULIP) || mat.equals(Material.WHITE_TULIP) || mat.equals(Material.FERN) || mat.equals(Material.LARGE_FERN) || mat.equals(Material.GRASS) || mat.equals(Material.TALL_GRASS))
{
return false;
}
}
if(onto.equals(Material.ACACIA_LEAVES) || onto.equals(Material.BIRCH_LEAVES) || onto.equals(Material.DARK_OAK_LEAVES) || onto.equals(Material.JUNGLE_LEAVES) || onto.equals(Material.OAK_LEAVES) || onto.equals(Material.SPRUCE_LEAVES))
{
if(!mat.isSolid())
{
return false;
}
}
return true;
}
public static boolean isDecorant(Material m)
{
//@builder
return m.equals(Material.GRASS)
|| m.equals(Material.TALL_GRASS)
|| m.equals(B.mat("CORNFLOWER"))
|| m.equals(Material.SUNFLOWER)
|| m.equals(Material.CHORUS_FLOWER)
|| m.equals(Material.POPPY)
|| m.equals(Material.DANDELION)
|| m.equals(Material.OXEYE_DAISY)
|| m.equals(Material.ORANGE_TULIP)
|| m.equals(Material.PINK_TULIP)
|| m.equals(Material.RED_TULIP)
|| m.equals(Material.WHITE_TULIP)
|| m.equals(Material.LILAC)
|| m.equals(Material.DEAD_BUSH)
|| m.equals(B.mat("SWEET_BERRY_BUSH"))
|| m.equals(Material.ROSE_BUSH)
|| m.equals(B.mat("WITHER_ROSE"))
|| m.equals(Material.ALLIUM)
|| m.equals(Material.BLUE_ORCHID)
|| m.equals(B.mat("LILY_OF_THE_VALLEY"))
|| m.equals(B.mat("CRIMSON_FUNGUS"))
|| m.equals(B.mat("WARPED_FUNGUS"))
|| m.equals(Material.RED_MUSHROOM)
|| m.equals(Material.BROWN_MUSHROOM)
|| m.equals(B.mat("CRIMSON_ROOTS"))
|| m.equals(B.mat("AZURE_BLUET"))
|| m.equals(B.mat("WEEPING_VINES"))
|| m.equals(B.mat("WEEPING_VINES_PLANT"))
|| m.equals(B.mat("WARPED_ROOTS"))
|| m.equals(B.mat("NETHER_SPROUTS"))
|| m.equals(B.mat("TWISTING_VINES"))
|| m.equals(B.mat("TWISTING_VINES_PLANT"))
|| m.equals(Material.SUGAR_CANE)
|| m.equals(Material.WHEAT)
|| m.equals(Material.POTATOES)
|| m.equals(Material.CARROTS)
|| m.equals(Material.BEETROOTS)
|| m.equals(Material.NETHER_WART)
|| m.equals(B.mat("SEA_PICKLE"))
|| m.equals(B.mat("SEAGRASS"))
|| m.equals(B.mat("ACACIA_BUTTON"))
|| m.equals(B.mat("BIRCH_BUTTON"))
|| m.equals(B.mat("CRIMSON_BUTTON"))
|| m.equals(B.mat("DARK_OAK_BUTTON"))
|| m.equals(B.mat("JUNGLE_BUTTON"))
|| m.equals(B.mat("OAK_BUTTON"))
|| m.equals(B.mat("POLISHED_BLACKSTONE_BUTTON"))
|| m.equals(B.mat("SPRUCE_BUTTON"))
|| m.equals(B.mat("STONE_BUTTON"))
|| m.equals(B.mat("WARPED_BUTTON"))
|| m.equals(Material.TORCH)
|| m.equals(B.mat("SOUL_TORCH"));
//@done
}
}