1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-21 20:25:54 +00:00
Slimefun4/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
TheBusyBiscuit ea26ac49b1 Ree... Reeeee... Reeeeeeeee... REFACTORING
(let's hope I didn't break anything)
2020-02-01 01:32:38 +01:00

103 lines
2.1 KiB
Java

package me.mrCookieSlime.Slimefun.Objects;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.BlockFace;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
public class MultiBlock {
public static final List<Tag<Material>> SUPPORTED_TAGS = Arrays.asList(
Tag.LOGS,
Tag.WOODEN_FENCES,
Tag.WOODEN_TRAPDOORS,
Tag.WOODEN_SLABS
);
private final SlimefunItem item;
private final Material[] blocks;
private final BlockFace trigger;
private final boolean isSymmetric;
public MultiBlock(SlimefunItem item, Material[] build, BlockFace trigger) {
this.item = item;
this.blocks = build;
this.trigger = trigger;
this.isSymmetric = isSymmetric(build);
}
public SlimefunItem getSlimefunItem() {
return item;
}
private static boolean isSymmetric(Material[] blocks) {
return blocks[0] == blocks[2] && blocks[3] == blocks[5] && blocks[6] == blocks[8];
}
public Material[] getBuild() {
return this.blocks;
}
public BlockFace getTriggerBlock() {
return this.trigger;
}
public void register() {
SlimefunPlugin.getRegistry().getMultiBlocks().add(this);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MultiBlock)) return false;
MultiBlock mb = (MultiBlock) obj;
if (trigger == mb.getTriggerBlock()) {
for (int i = 0; i < mb.getBuild().length; i++) {
if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
}
return true;
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(item.getID(), blocks, trigger, isSymmetric);
}
private boolean compareBlocks(Material a, Material b) {
if (b != null) {
for (Tag<Material> tag : SUPPORTED_TAGS) {
if (tag.isTagged(b)) {
return tag.isTagged(a);
}
}
if (b != a) {
return false;
}
}
return true;
}
public boolean isSymmetric() {
return this.isSymmetric;
}
@Override
public String toString() {
return "MultiBlock (" + item.getID() + ") {" + Arrays.toString(blocks) + "}";
}
}