From 59b2359d35918fa6caf14e6ba53f8906006da36f Mon Sep 17 00:00:00 2001 From: pop4959 Date: Thu, 16 Jan 2020 04:06:22 -0800 Subject: [PATCH] Add bed matcher --- .../com/griefcraft/util/ProtectionFinder.java | 8 ++++ .../griefcraft/util/matchers/BedMatcher.java | 40 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/com/griefcraft/util/matchers/BedMatcher.java diff --git a/src/main/java/com/griefcraft/util/ProtectionFinder.java b/src/main/java/com/griefcraft/util/ProtectionFinder.java index 7c12d64..8289189 100644 --- a/src/main/java/com/griefcraft/util/ProtectionFinder.java +++ b/src/main/java/com/griefcraft/util/ProtectionFinder.java @@ -31,6 +31,7 @@ import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; import com.griefcraft.model.Protection; +import com.griefcraft.util.matchers.BedMatcher; import com.griefcraft.util.matchers.DoorMatcher; import com.griefcraft.util.matchers.DoubleChestMatcher; import com.griefcraft.util.matchers.GravityMatcher; @@ -186,6 +187,13 @@ else if (DoorMatcher.PROTECTABLES_DOORS.contains(material)) { }; } + // Beds + else if (BedMatcher.BEDS.contains(material)) { + return new Matcher[]{ + new BedMatcher() + }; + } + // Anything else else { return new Matcher[]{ diff --git a/src/main/java/com/griefcraft/util/matchers/BedMatcher.java b/src/main/java/com/griefcraft/util/matchers/BedMatcher.java new file mode 100644 index 0000000..fc2027d --- /dev/null +++ b/src/main/java/com/griefcraft/util/matchers/BedMatcher.java @@ -0,0 +1,40 @@ +package com.griefcraft.util.matchers; + +import com.griefcraft.util.ProtectionFinder; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.data.type.Bed; + +import java.util.EnumSet; +import java.util.Set; + +/** + * Matches beds + */ +public class BedMatcher implements ProtectionFinder.Matcher { + + public static final Set BEDS = EnumSet.of(Material.BLACK_BED, Material.BLUE_BED, Material.BROWN_BED, + Material.CYAN_BED, Material.GRAY_BED, Material.GREEN_BED, Material.LIGHT_BLUE_BED, Material.LIGHT_GRAY_BED, + Material.LIME_BED, Material.MAGENTA_BED, Material.ORANGE_BED, Material.PINK_BED, Material.PURPLE_BED, + Material.RED_BED, Material.WHITE_BED, Material.YELLOW_BED); + + @Override + public boolean matches(ProtectionFinder finder) { + BlockState baseBlockState = finder.getBaseBlock(); + Block baseBlock = baseBlockState.getBlock(); + Bed baseBlockData; + try { + baseBlockData = (Bed) baseBlockState.getBlockData(); + if (baseBlockData.getPart() == Bed.Part.FOOT) { + finder.addBlock(baseBlock.getRelative(baseBlockData.getFacing())); + } else { + finder.addBlock(baseBlock.getRelative(baseBlockData.getFacing().getOppositeFace())); + } + return true; + } catch (ClassCastException e) { + return false; + } + } + +}