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-05 19:41:59 +00:00
|
|
|
import org.bukkit.block.BlockFace;
|
2019-09-03 11:06:24 +00:00
|
|
|
|
2018-09-05 14:16:29 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
|
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);
|
2019-09-26 16:42:47 +00:00
|
|
|
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) {
|
|
|
|
if (MaterialHelper.isLog(b)) {
|
|
|
|
return MaterialHelper.isLog(a);
|
|
|
|
}
|
|
|
|
|
|
|
|
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-09-26 16:42:47 +00:00
|
|
|
|
|
|
|
@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
|
|
|
}
|