From 982fda081a67d079660e6757ac5f16ae121a12ca Mon Sep 17 00:00:00 2001 From: asofold Date: Thu, 23 Aug 2018 23:56:00 +0200 Subject: [PATCH] More explicit flags for blocks. --- .../compat/blocks/init/BlockInit.java | 2 +- .../blocks/init/vanilla/BlocksMC1_13.java | 10 +- .../utilities/map/BlockProperties.java | 95 ++++++------------- .../utilities/map/MaterialUtil.java | 73 +++++++++----- 4 files changed, 80 insertions(+), 100 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/BlockInit.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/BlockInit.java index b74f90d2..f8e4423e 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/BlockInit.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/BlockInit.java @@ -107,7 +107,7 @@ public class BlockInit { * @param newId */ public static void setInstantAir(String newId) { - BlockFlags.setFlagsAs(newId, Material.AIR); + BlockFlags.setFlagsAs(newId, Material.AIR); // TODO: Problematic, should be F_IGN_PASSABLE BlockProperties.setBlockProps(newId, BlockProperties.instantType); } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/vanilla/BlocksMC1_13.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/vanilla/BlocksMC1_13.java index 66d2b409..3133e90d 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/vanilla/BlocksMC1_13.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/blocks/init/vanilla/BlocksMC1_13.java @@ -52,9 +52,6 @@ public class BlocksMC1_13 implements BlockPropertiesSetup { } // Passable (alive) coral parts. - for (Material mat : MaterialUtil.PASSABLE_CORAL_PARTS) { - BlockInit.setInstantAir(mat); - } // Dead coral parts (solid + ground already set). for (Material mat : MaterialUtil.DEAD_CORAL_PARTS) { @@ -63,18 +60,14 @@ public class BlocksMC1_13 implements BlockPropertiesSetup { } // Kelp. - BlockInit.setInstantAir("KELP"); // Fern. - BlockInit.setInstantAir("FERN"); // Bubble column. // TODO: Drag down effect: probably not using velocity. BlockInit.setAs("BUBBLE_COLUMN", Material.WATER); // Further melon/pumpkin stems. - BlockInit.setInstantAir("ATTACHED_MELON_STEM"); - BlockInit.setInstantAir("ATTACHED_PUMPKIN_STEM"); // Wall torch BlockInit.setInstantAir("WALL_TORCH"); @@ -87,7 +80,7 @@ public class BlocksMC1_13 implements BlockPropertiesSetup { // Stone types. for (Material mat : BridgeMaterial.getAllBlocks("andesite", "diorite", "granite", "polished_andesite", "polished_diorite", "polished_granite", - "smooth_stone")) { + "smooth_stone", "nether_wart", "nether_warts")) { BlockInit.setAs(mat, Material.STONE); } @@ -176,7 +169,6 @@ public class BlocksMC1_13 implements BlockPropertiesSetup { BlockProperties.noTool, 0.5f, BlockProperties.secToMs(0.7))); // Grass path. - // TODO: HEIGHT16_15 instead. BlockFlags.removeFlags(Material.GRASS_PATH, BlockProperties.F_HEIGHT100); BlockFlags.addFlags(Material.GRASS_PATH, BlockProperties.F_XZ100 | BlockProperties.F_HEIGHT16_15); diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/BlockProperties.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/BlockProperties.java index 897ed301..ac9baf4d 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/BlockProperties.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/BlockProperties.java @@ -609,58 +609,6 @@ public class BlockProperties { /** Returned if unknown. */ private static BlockProps defaultBlockProps = instantType; - /** The Constant instantMat. */ - protected static final Material[] instantMat = new Material[]{ - // Named in wiki. - BridgeMaterial.WHEAT_CROPS, - Material.TRIPWIRE_HOOK, Material.TRIPWIRE, - Material.TORCH, - Material.TNT, - BridgeMaterial.SUGAR_CANE, - BridgeMaterial.get("red_rose"), BridgeMaterial.DANDELION, - BridgeMaterial.get("blue_orchid"), - Material.REDSTONE_WIRE, - BridgeMaterial.get("REDSTONE_TORCH_ON"), - BridgeMaterial.get("REDSTONE_TORCH_OFF"), - BridgeMaterial.get("DIODE_BLOCK_ON"), BridgeMaterial.get("DIODE_BLOCK_OFF"), - BridgeMaterial.get("repeater"), - Material.PUMPKIN_STEM, - BridgeMaterial.getBlock("NETHER_WART"), - BridgeMaterial.getBlock("NETHER_WARTS"), // TODO: Bug or very old? - Material.BROWN_MUSHROOM, Material.RED_MUSHROOM, - Material.MELON_STEM, - BridgeMaterial.LILY_PAD, - BridgeMaterial.TALL_GRASS, - BridgeMaterial.GRASS, - Material.FIRE, - // - BridgeMaterial.WHEAT_CROPS, - - // 1.4 - BridgeMaterial.COMMAND_BLOCK, - BridgeMaterial.CARROTS, - BridgeMaterial.POTATOES, - - // 1.13 /... - BridgeMaterial.get("allium"), - BridgeMaterial.get("azure_bluet"), - BridgeMaterial.get("dandelion"), - BridgeMaterial.getBlock("dandelion_yellow"), - BridgeMaterial.get("kelp_plant"), - BridgeMaterial.get("large_fern"), - BridgeMaterial.get("lilac"), - BridgeMaterial.get("oxeye_daisy"), - BridgeMaterial.get("peony"), - BridgeMaterial.get("poppy"), - BridgeMaterial.get("redstone_torch"), - BridgeMaterial.get("redstone_wall_torch"), - BridgeMaterial.getBlock("rose_red"), - BridgeMaterial.get("seagrass"), - BridgeMaterial.get("sea_pickle"), - BridgeMaterial.get("sunflower"), - BridgeMaterial.get("tall_seagrass"), - }; - /** The rt ray. */ private static ICollidePassable rtRay = null; @@ -1154,9 +1102,6 @@ public class BlockProperties { setFlag(mat, F_IGN_PASSABLE); } } - for (final Material mat : MaterialUtil.WOODEN_PRESSURE_PLATES) { - setFlag(mat, F_IGN_PASSABLE); - } // ? Extra flag for COCOA, ANVIL: depends on data value (other issue) @@ -1247,20 +1192,34 @@ public class BlockProperties { } // Set block break properties. // Instantly breakable. - for (final Material mat : instantMat) { + for (final Material mat : new Material[]{ + Material.TRIPWIRE_HOOK, Material.TRIPWIRE, + Material.TORCH, + Material.TNT, + Material.REDSTONE_WIRE, + BridgeMaterial.get("REDSTONE_TORCH_ON"), + BridgeMaterial.get("REDSTONE_TORCH_OFF"), + BridgeMaterial.get("DIODE_BLOCK_ON"), BridgeMaterial.get("DIODE_BLOCK_OFF"), + BridgeMaterial.get("repeater"), + BridgeMaterial.LILY_PAD, + Material.FIRE, + BridgeMaterial.COMMAND_BLOCK, + BridgeMaterial.get("sea_pickle"), + }) { if (mat != null) { setBlock(mat, instantType); } } - @SuppressWarnings("unchecked") - List> instantSets = Arrays.asList( - MaterialUtil.BUSHES, MaterialUtil.TULIPS, - MaterialUtil.SAPLINGS - ); - for (final Set set : instantSets) { - for (final Material mat : set) { - setBlock(mat, instantType); + for (final Material mat : MaterialUtil.INSTANT_PLANTS) { + setBlock(mat, instantType); } + // Instant break and fully passable. + for (Material mat : new Material[] { + BridgeMaterial.get("redstone_torch"), + BridgeMaterial.get("redstone_wall_torch"), + }) { + setBlock(mat, instantType); + BlockFlags.addFlags(mat, F_IGN_PASSABLE); } // Leaf type @@ -1305,7 +1264,7 @@ public class BlockProperties { setBlock(Material.LADDER, new BlockProps(noTool, 0.4f, secToMs(0.6), 2.5f)); setBlock(Material.CACTUS, new BlockProps(noTool, 0.4f, secToMs(0.6))); for (Material mat : MaterialUtil.WOODEN_PRESSURE_PLATES) { - setBlock(mat, new BlockProps(woodAxe, 0.5f, secToMs(0.75, 0.4, 0.2, 0.15, 0.1, 0.1))); + setBlockProps(mat, new BlockProps(woodAxe, 0.5f, secToMs(0.75, 0.4, 0.2, 0.15, 0.1, 0.1))); } setBlock(BridgeMaterial.STONE_PRESSURE_PLATE, new BlockProps(woodPickaxe, 0.5f, secToMs(2.5, 0.4, 0.2, 0.15, 0.1, 0.07))); setBlock(Material.SAND, sandType); @@ -1584,6 +1543,12 @@ public class BlockProperties { | BlockProperties.F_SOLID); } + // Fully passable blocks. + for (Material mat : MaterialUtil.FULLY_PASSABLE_BLOCKS) { + BlockFlags.addFlags(mat, F_IGN_PASSABLE); + BlockFlags.removeFlags(mat, F_SOLID | F_GROUND); + } + } /** diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/MaterialUtil.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/MaterialUtil.java index 1b30588f..b888213d 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/MaterialUtil.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/utilities/map/MaterialUtil.java @@ -145,6 +145,12 @@ public class MaterialUtil { // (May not always have all aspects in common.) ///////////////////////////////////////////////// + public static final Set ALL_BUTTONS = Collections.unmodifiableSet( + BridgeMaterial.getBySuffix("_button", AlmostBoolean.YES, "legacy")); + + public static final Set ALL_PRESSURE_PLATES = Collections.unmodifiableSet( + BridgeMaterial.getBySuffix("_pressure_plate", AlmostBoolean.YES, "legacy")); + public static final Set BANNERS = Collections.unmodifiableSet(addBlocks( BridgeMaterial.getByPrefixAndSuffix( null, @@ -168,10 +174,6 @@ public class MaterialUtil { BOATS = Collections.unmodifiableSet(temp); } - /** Bushes (block). */ - public static final Set BUSHES = Collections.unmodifiableSet( - BridgeMaterial.getBySuffix("bush", AlmostBoolean.YES, "legacy", "potted")); - public static final Set CARPETS = Collections.unmodifiableSet(addBlocks( BridgeMaterial.getBySuffix("_carpet", AlmostBoolean.YES, "legacy"), "carpet")); @@ -248,7 +250,7 @@ public class MaterialUtil { public static final Set LEAVES = Collections.unmodifiableSet(addBlocks( BridgeMaterial.getByPrefixAndSuffix( woodTypes, - Arrays.asList("_leaves"), // Strictly _pressure_plate for 1.13. + Arrays.asList("_leaves"), AlmostBoolean.YES // , ... ), "leaves", "leaves_2")); @@ -270,15 +272,6 @@ public class MaterialUtil { "legacy" ), "mushroom_stem" , "huge_mushroom_1", "huge_mushroom_2")); - /** Coral parts that are passable when alive, but become solid when dead. */ - public static final Set PASSABLE_CORAL_PARTS = Collections.unmodifiableSet( - BridgeMaterial.getByPrefixAndSuffix( - null, - Arrays.asList("coral_fan", "coral_wall_fan", "coral"), - AlmostBoolean.YES, - "dead", "legacy" - )); - public static final Set PLANKS = Collections.unmodifiableSet(addBlocks( BridgeMaterial.getBySuffix("_planks", AlmostBoolean.YES, "legacy"), "wood")); @@ -287,10 +280,6 @@ public class MaterialUtil { public static final Set RAILS = Collections.unmodifiableSet( BridgeMaterial.getBySuffix(Arrays.asList("rail", "rails"), AlmostBoolean.YES, "legacy")); - /** Places saplings (block). */ - public static final Set SAPLINGS = Collections.unmodifiableSet( - BridgeMaterial.getBySuffix("sapling", AlmostBoolean.YES, "legacy", "potted")); - public static final Set SHULKER_BOXES = Collections.unmodifiableSet( BridgeMaterial.getBySuffix("shulker_box", AlmostBoolean.YES, "legacy")); @@ -325,10 +314,6 @@ public class MaterialUtil { "terracotta", "hard_clay", "stained_clay" )); - /** Tulips (block). */ - public static final Set TULIPS = Collections.unmodifiableSet( - BridgeMaterial.getBySuffix("tulip", AlmostBoolean.YES, "legacy", "potted")); - /** * Collect fully solid blocks, that are not contained in other collections * (of blocks that are fully solid too). @@ -340,8 +325,7 @@ public class MaterialUtil { "andesite", "diorite", "granite", "sandstone", "command_block" - ), - AlmostBoolean.YES, "legacy"), + ), AlmostBoolean.YES, "legacy"), "observer", "structure_block", "note_block", "tnt", "piston", "sticky_piston", "piston_base", "piston_sticky_base", @@ -353,7 +337,7 @@ public class MaterialUtil { "emerald_block", "lapis_block", "redstone_block", "purpur_block", "smooth_stone", "smooth_quartz", "quartz_block", "sand", "stone", "gravel", "dirt", "grass_block", "grass", - "sea_lantern", "redstone_lamp", "sponge", "wet_sponge" + "sea_lantern", "redstone_lamp", "glowstone", "sponge", "wet_sponge" )); public static final Set WALL_BANNERS = Collections.unmodifiableSet(addBlocks( @@ -454,6 +438,31 @@ public class MaterialUtil { // Collections of collections /////////////////////////////// + /** Instantly breakable, fully passable. */ + @SuppressWarnings("unchecked") + public static final Set INSTANT_PLANTS = Collections.unmodifiableSet(join( + BridgeMaterial.getBySuffix(Arrays.asList( + "bush", "sapling", "tulip", "orchid", "mushroom", "bluet"), + AlmostBoolean.YES, "legacy", "potted"), + BridgeMaterial.getByPrefixAndSuffix( + null, + Arrays.asList("coral_fan", "coral_wall_fan", "coral"), + AlmostBoolean.YES, "dead", "legacy"), + BridgeMaterial.getAllBlocks("attached_melon_stem", "attached_pumpkin_stem", + "allium", "dandelion", + "dandelion_yellow", "fern", "kelp", "kelp_plant", + "large_fern", "lilac", "melon_stem", "oxeye_daisy", + "peony", "poppy", "red_rose", "rose_red", "seagrass", + "sunflower", "tall_seagrass" + // TODO: Ground or not: "beetroots", "beetroot_block" + ), + new HashSet(Arrays.asList(BridgeMaterial.TALL_GRASS, + BridgeMaterial.WHEAT_CROPS, BridgeMaterial.CARROTS, + BridgeMaterial.POTATOES, BridgeMaterial.GRASS, + Material.PUMPKIN_STEM, Material.MELON_STEM, + Material.SUGAR_CANE)) + )); + /** * Sets of fully solid blocks (in terms of: can walk on, can't pass through, * full bounds - not necessarily 'solid' officially). @@ -478,6 +487,20 @@ public class MaterialUtil { WOOL_BLOCKS )); + /** + * Collections of blocks that are fully passable. + */ + @SuppressWarnings("unchecked") + public static final Set FULLY_PASSABLE_BLOCKS = Collections.unmodifiableSet(join( + ALL_BUTTONS, + ALL_PRESSURE_PLATES, + BANNERS, + RAILS, + WALL_BANNERS, + INSTANT_PLANTS, + BridgeMaterial.getAllBlocks("lever") + )); + //////////////////// // Access methods. ////////////////////