diff --git a/src/main/java/eu/ruekov/ruakij/LinkedBeaconTeleporters/Function.java b/src/main/java/eu/ruekov/ruakij/LinkedBeaconTeleporters/Function.java index 00a7f96..6c98aaa 100644 --- a/src/main/java/eu/ruekov/ruakij/LinkedBeaconTeleporters/Function.java +++ b/src/main/java/eu/ruekov/ruakij/LinkedBeaconTeleporters/Function.java @@ -2,11 +2,14 @@ package eu.ruekov.ruakij.LinkedBeaconTeleporters; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.util.Vector; +import java.util.Arrays; import java.util.InvalidPropertiesFormatException; import java.util.List; -import java.util.Map; import java.util.Random; public class Function { @@ -38,4 +41,115 @@ public class Function { } return str; } + + public static List transparentMaterials = Arrays.asList( + Material.AIR, + Material.GLASS, + Material.GLASS_PANE, + Material.BLACK_STAINED_GLASS, + Material.BLACK_STAINED_GLASS_PANE, + Material.BLUE_STAINED_GLASS, + Material.BLUE_STAINED_GLASS_PANE, + Material.BROWN_STAINED_GLASS, + Material.BROWN_STAINED_GLASS_PANE, + Material.CYAN_STAINED_GLASS, + Material.CYAN_STAINED_GLASS_PANE, + Material.GRAY_STAINED_GLASS, + Material.GRAY_STAINED_GLASS_PANE, + Material.GREEN_STAINED_GLASS, + Material.GREEN_STAINED_GLASS_PANE, + Material.LIGHT_BLUE_STAINED_GLASS, + Material.LIGHT_BLUE_STAINED_GLASS_PANE, + Material.LIGHT_GRAY_STAINED_GLASS, + Material.LIGHT_GRAY_STAINED_GLASS_PANE, + Material.LIME_STAINED_GLASS, + Material.LIME_STAINED_GLASS_PANE, + Material.MAGENTA_STAINED_GLASS, + Material.MAGENTA_STAINED_GLASS_PANE, + Material.ORANGE_STAINED_GLASS, + Material.ORANGE_STAINED_GLASS_PANE, + Material.PINK_STAINED_GLASS, + Material.PINK_STAINED_GLASS_PANE, + Material.PURPLE_STAINED_GLASS, + Material.PURPLE_STAINED_GLASS_PANE, + Material.RED_STAINED_GLASS, + Material.RED_STAINED_GLASS_PANE, + Material.WHITE_STAINED_GLASS, + Material.WHITE_STAINED_GLASS_PANE, + Material.YELLOW_STAINED_GLASS, + Material.YELLOW_STAINED_GLASS_PANE, + Material.PISTON, + Material.PISTON_HEAD, + Material.MOVING_PISTON, + Material.STICKY_PISTON, + Material.ACACIA_LEAVES, + Material.BIRCH_LEAVES, + Material.DARK_OAK_LEAVES, + Material.JUNGLE_LEAVES, + Material.OAK_LEAVES, + Material.SPRUCE_LEAVES, + Material.ACACIA_SLAB, + Material.ANDESITE_SLAB, + Material.BIRCH_SLAB, + Material.BLACKSTONE_SLAB, + Material.BRICK_SLAB, + Material.COBBLESTONE_SLAB, + Material.CRIMSON_SLAB, + Material.CUT_RED_SANDSTONE_SLAB, + Material.CUT_SANDSTONE_SLAB, + Material.DARK_OAK_SLAB, + Material.DARK_PRISMARINE_SLAB, + Material.DIORITE_SLAB, + Material.END_STONE_BRICK_SLAB, + Material.GRANITE_SLAB, + Material.JUNGLE_SLAB, + Material.MOSSY_COBBLESTONE_SLAB, + Material.MOSSY_STONE_BRICK_SLAB, + Material.NETHER_BRICK_SLAB, + Material.OAK_SLAB, + Material.PETRIFIED_OAK_SLAB, + Material.POLISHED_ANDESITE_SLAB, + Material.POLISHED_BLACKSTONE_BRICK_SLAB, + Material.POLISHED_BLACKSTONE_SLAB, + Material.POLISHED_DIORITE_SLAB, + Material.POLISHED_GRANITE_SLAB, + Material.PRISMARINE_BRICK_SLAB, + Material.PRISMARINE_SLAB, + Material.PURPUR_SLAB, + Material.QUARTZ_SLAB, + Material.RED_NETHER_BRICK_SLAB, + Material.RED_SANDSTONE_SLAB, + Material.SANDSTONE_SLAB, + Material.SMOOTH_QUARTZ_SLAB, + Material.SMOOTH_RED_SANDSTONE_SLAB, + Material.SMOOTH_SANDSTONE_SLAB, + Material.SMOOTH_STONE_SLAB, + Material.SPRUCE_SLAB, + Material.STONE_BRICK_SLAB, + Material.STONE_SLAB, + Material.WARPED_SLAB + ); + public static Block searchForMaterial(Location startLoc, Vector searchDirection, Material searchMaterial, List ignoreMaterials){ + Location loc = new Location(startLoc.getWorld(), startLoc.getBlockX(), startLoc.getBlockY(), startLoc.getBlockZ()); + for(int i=0; loc.getBlockY()>=0 && loc.getBlockY()<=255; loc.add(searchDirection)){ + Block block = loc.getBlock(); + + // Check for correct material + if(block.getType() == searchMaterial) return block; + + // Check for non-ignore-block + boolean found = false; + for(Material ignoreMaterial : ignoreMaterials){ + if(block.getType() == ignoreMaterial){ + found = true; + break; + } + } + // If not found, searchMaterial not found + if(!found) return null; + } + + // Reached 0 or 255, searchMaterial not found + return null; + } }