2016-04-14 16:24:03 +00:00
|
|
|
package me.mrCookieSlime.Slimefun.Objects;
|
|
|
|
|
2019-12-27 10:38:54 +00:00
|
|
|
import java.util.Arrays;
|
2016-04-14 16:24:03 +00:00
|
|
|
import java.util.List;
|
2019-12-29 13:14:51 +00:00
|
|
|
import java.util.Objects;
|
2016-04-14 16:24:03 +00:00
|
|
|
|
2019-09-03 11:06:24 +00:00
|
|
|
import org.bukkit.Material;
|
2019-09-27 19:08:57 +00:00
|
|
|
import org.bukkit.Tag;
|
2019-09-05 19:41:59 +00:00
|
|
|
import org.bukkit.block.BlockFace;
|
2019-09-03 11:06:24 +00:00
|
|
|
|
|
|
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
|
|
|
|
|
|
public class MultiBlock {
|
|
|
|
|
2019-12-27 10:38:54 +00:00
|
|
|
public static final List<Tag<Material>> SUPPORTED_TAGS = Arrays.asList(
|
|
|
|
Tag.LOGS,
|
|
|
|
Tag.WOODEN_FENCES,
|
|
|
|
Tag.WOODEN_TRAPDOORS,
|
|
|
|
Tag.WOODEN_SLABS
|
|
|
|
);
|
|
|
|
|
2019-12-29 13:14:51 +00:00
|
|
|
private final SlimefunItem item;
|
2019-12-27 10:38:54 +00:00
|
|
|
private final Material[] blocks;
|
|
|
|
private final BlockFace trigger;
|
|
|
|
private final boolean isSymmetric;
|
2019-09-05 19:41:59 +00:00
|
|
|
|
2019-12-29 13:14:51 +00:00
|
|
|
public MultiBlock(SlimefunItem item, Material[] build, BlockFace trigger) {
|
|
|
|
this.item = item;
|
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
this.blocks = build;
|
|
|
|
this.trigger = trigger;
|
2019-09-05 19:41:59 +00:00
|
|
|
this.isSymmetric = isSymmetric(build);
|
|
|
|
}
|
|
|
|
|
2019-12-29 13:14:51 +00:00
|
|
|
public SlimefunItem getSlimefunItem() {
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
2019-09-21 14:21:10 +00:00
|
|
|
private static boolean isSymmetric(Material[] blocks) {
|
2019-12-29 13:14:51 +00:00
|
|
|
return blocks[0] == blocks[2] && blocks[3] == blocks[5] && blocks[6] == blocks[8];
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public Material[] getBuild() {
|
|
|
|
return this.blocks;
|
|
|
|
}
|
|
|
|
|
2019-09-05 19:41:59 +00:00
|
|
|
public BlockFace getTriggerBlock() {
|
2016-04-14 16:24:03 +00:00
|
|
|
return this.trigger;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void register() {
|
2020-02-01 00:32:38 +00:00
|
|
|
SlimefunPlugin.getRegistry().getMultiBlocks().add(this);
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
|
2019-12-29 13:14:51 +00:00
|
|
|
@Override
|
|
|
|
public boolean equals(Object obj) {
|
|
|
|
if (!(obj instanceof MultiBlock)) return false;
|
2019-08-31 15:52:20 +00:00
|
|
|
|
2019-12-29 13:14:51 +00:00
|
|
|
MultiBlock mb = (MultiBlock) obj;
|
2019-08-31 15:52:20 +00:00
|
|
|
if (trigger == mb.getTriggerBlock()) {
|
2016-04-14 16:24:03 +00:00
|
|
|
for (int i = 0; i < mb.getBuild().length; i++) {
|
2019-08-31 15:52:20 +00:00
|
|
|
if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2019-08-31 15:52:20 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
return true;
|
|
|
|
}
|
2019-08-31 15:52:20 +00:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2019-12-29 13:14:51 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
return Objects.hash(item.getID(), blocks, trigger, isSymmetric);
|
|
|
|
}
|
2019-08-31 15:52:20 +00:00
|
|
|
|
|
|
|
private boolean compareBlocks(Material a, Material b) {
|
|
|
|
if (b != null) {
|
2019-10-05 21:49:11 +00:00
|
|
|
|
2019-12-27 10:38:54 +00:00
|
|
|
for (Tag<Material> tag : SUPPORTED_TAGS) {
|
|
|
|
if (tag.isTagged(b)) {
|
|
|
|
return tag.isTagged(a);
|
|
|
|
}
|
2019-11-10 19:18:06 +00:00
|
|
|
}
|
|
|
|
|
2019-08-31 15:52:20 +00:00
|
|
|
if (b != a) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2019-09-05 19:41:59 +00:00
|
|
|
|
2019-09-21 14:21:10 +00:00
|
|
|
public boolean isSymmetric() {
|
2019-09-05 19:41:59 +00:00
|
|
|
return this.isSymmetric;
|
|
|
|
}
|
2019-12-29 13:14:51 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "MultiBlock (" + item.getID() + ") {" + Arrays.toString(blocks) + "}";
|
|
|
|
}
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|