From 26bd88ccd7257c47e4384f4759c60dc613077041 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 10 Jul 2022 15:04:44 +1000 Subject: [PATCH] SPIGOT-7070: Material.SCULK_VEIN has Waterlogged data class, should also be MultipleFacing --- .../block/impl/CraftSculkVein.java | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java index f556b9137..fe3321bfa 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java +++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java @@ -3,7 +3,7 @@ */ package org.bukkit.craftbukkit.block.impl; -public final class CraftSculkVein extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged { +public final class CraftSculkVein extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SculkVein, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged { public CraftSculkVein() { super(); @@ -13,6 +13,56 @@ public final class CraftSculkVein extends org.bukkit.craftbukkit.block.data.Craf super(state); } + // org.bukkit.craftbukkit.block.data.CraftMultipleFacing + + private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean[] FACES = new net.minecraft.world.level.block.state.properties.BlockStateBoolean[]{ + getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "down", true) + }; + + @Override + public boolean hasFace(org.bukkit.block.BlockFace face) { + net.minecraft.world.level.block.state.properties.BlockStateBoolean state = FACES[face.ordinal()]; + if (state == null) { + throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces."); + } + return get(state); + } + + @Override + public void setFace(org.bukkit.block.BlockFace face, boolean has) { + net.minecraft.world.level.block.state.properties.BlockStateBoolean state = FACES[face.ordinal()]; + if (state == null) { + throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces."); + } + set(state, has); + } + + @Override + public java.util.Set getFaces() { + com.google.common.collect.ImmutableSet.Builder faces = com.google.common.collect.ImmutableSet.builder(); + + for (int i = 0; i < FACES.length; i++) { + if (FACES[i] != null && get(FACES[i])) { + faces.add(org.bukkit.block.BlockFace.values()[i]); + } + } + + return faces.build(); + } + + @Override + public java.util.Set getAllowedFaces() { + com.google.common.collect.ImmutableSet.Builder faces = com.google.common.collect.ImmutableSet.builder(); + + for (int i = 0; i < FACES.length; i++) { + if (FACES[i] != null) { + faces.add(org.bukkit.block.BlockFace.values()[i]); + } + } + + return faces.build(); + } + // org.bukkit.craftbukkit.block.data.CraftWaterlogged private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean WATERLOGGED = getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "waterlogged");