1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-21 04:05:48 +00:00
Slimefun4/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java

122 lines
2.6 KiB
Java
Raw Normal View History

2016-04-14 16:24:03 +00:00
package me.mrCookieSlime.Slimefun.Objects;
import java.util.List;
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;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
public class MultiBlock {
2019-08-28 08:59:20 +00:00
private Material[] blocks;
2019-09-05 19:41:59 +00:00
private BlockFace trigger;
private boolean isSymmetric;
@Deprecated
2016-04-14 16:24:03 +00:00
public MultiBlock(Material[] build, Material trigger) {
2019-09-05 19:41:59 +00:00
this.blocks = build;
this.isSymmetric = isSymmetric(build);
this.trigger = convertTriggerMaterialToBlockFace(build, trigger);
2019-09-05 19:41:59 +00:00
}
2019-09-21 14:21:10 +00:00
public MultiBlock(Material[] build, BlockFace trigger) {
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-09-21 14:21:10 +00:00
private static boolean isSymmetric(Material[] blocks) {
2019-09-05 20:31:08 +00:00
return blocks[0] == blocks[2]
2019-09-05 19:41:59 +00:00
&& blocks[3] == blocks[5]
2019-09-05 20:31:08 +00:00
&& 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() {
2019-09-03 11:06:24 +00:00
SlimefunPlugin.getUtilities().allMultiblocks.add(this);
2016-04-14 16:24:03 +00:00
}
public static List<MultiBlock> list() {
2019-09-03 11:06:24 +00:00
return SlimefunPlugin.getUtilities().allMultiblocks;
2016-04-14 16:24:03 +00:00
}
public boolean isMultiBlock(SlimefunItem machine) {
2019-08-31 15:52:20 +00:00
if (machine instanceof SlimefunMachine) {
return isMultiBlock(((SlimefunMachine) machine).toMultiBlock());
2016-04-14 16:24:03 +00:00
}
else return false;
}
public boolean isMultiBlock(MultiBlock mb) {
if (mb == null) return false;
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;
}
private boolean compareBlocks(Material a, Material b) {
if (b != null) {
2019-09-27 19:08:57 +00:00
if (Tag.LOGS.isTagged(b)) {
return Tag.LOGS.isTagged(a);
2019-08-31 15:52:20 +00:00
}
if (Tag.WOODEN_FENCES.isTagged(b)) {
return Tag.WOODEN_FENCES.isTagged(a);
}
2019-10-05 22:11:42 +00:00
if (Tag.WOODEN_SLABS.isTagged(b)) {
return Tag.WOODEN_SLABS.isTagged(a);
}
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;
}
@Deprecated
public static BlockFace convertTriggerMaterialToBlockFace(Material[] build, Material trigger)
{
//Hacky
for (int i = 1; i < 9; i +=3) {
if (trigger == build[i]) {
switch (i) {
case 1:
return BlockFace.DOWN;
case 4:
return BlockFace.SELF;
case 7:
return BlockFace.UP;
default:
break;
}
}
}
return null;
}
2016-04-14 16:24:03 +00:00
}