/* This file is a part of the SteamWar software. Copyright (C) 2021 SteamWar.de-Serverteam This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package de.steamwar.fightsystem.utils; import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Dispenser; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockDataMeta; import org.bukkit.inventory.meta.ItemMeta; import java.util.Objects; public class FlatteningWrapper14 implements FlatteningWrapper { @Override public DyeColor getSilver() { return DyeColor.LIGHT_GRAY; } @Override public boolean isWater(Block block) { if(block.getType() == Material.WATER) return true; BlockData data = block.getBlockData(); if(!(data instanceof Waterlogged)) return false; return ((Waterlogged) data).isWaterlogged(); } @Override public boolean removeWater(Block block) { if(block.getType() == Material.WATER){ block.setType(Material.AIR); return true; } BlockData data = block.getBlockData(); if(!(data instanceof Waterlogged)) return false; Waterlogged waterlogged = (Waterlogged) data; if(waterlogged.isWaterlogged()){ block.setType(Material.AIR); return true; } return false; } @Override public boolean containsBlockMeta(ItemMeta meta) { return meta instanceof BlockDataMeta && ((BlockDataMeta)meta).hasBlockData(); } @Override public boolean hasAttributeModifier(ItemStack stack) { return stack.hasItemMeta() && Objects.requireNonNull(stack.getItemMeta()).hasAttributeModifiers(); } @Override public ItemStack onBreak(Block block) { Material type = block.getType(); switch(type){ case REDSTONE_WIRE: type = Material.REDSTONE; break; case PISTON_HEAD: type = Material.PISTON; break; case ICE: type = Material.AIR; break; } return new ItemStack(type); } @Override public boolean doRecord(BlockPhysicsEvent e) { return e.getBlock() == e.getSourceBlock() || e.getChangedType() == Material.AIR; } @Override public void forceLoadChunk(World world, int cX, int cZ) { world.setChunkForceLoaded(cX, cZ, true); } @Override public boolean checkPistonMoving(Block block) { return block.getType() == Material.MOVING_PISTON; } @Override public boolean isFacingWater(Block dispenser) { return dispenser.getRelative(((Dispenser) dispenser.getBlockData()).getFacing()).isLiquid(); } }