package com.amadornes.framez.movement.handler;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import codechicken.lib.vec.BlockCoord;
import codechicken.microblock.CommonMicroblock;
import codechicken.microblock.FaceMicroblock;
import codechicken.microblock.HollowMicroblock;
import codechicken.multipart.PartMap;
import codechicken.multipart.TMultiPart;
import codechicken.multipart.TSlottedPart;
import codechicken.multipart.TileMultipart;
import com.amadornes.framez.api.movement.IMovement;
import com.amadornes.framez.api.movement.ISticky;
public class StickyHandlerFMP implements ISticky {
private static final StickyHandlerFMP instance = new StickyHandlerFMP();
public static StickyHandlerFMP instance() {
return instance;
}
@Override
public boolean isSideSticky(World world, int x, int y, int z, ForgeDirection side, IMovement movement) {
TileMultipart tmp = TileMultipart.getTile(world, new BlockCoord(x, y, z));
if (tmp == null)
return false;
boolean is = false;
for (TMultiPart p : tmp.jPartList()) {
if (p instanceof TSlottedPart) {
int slot = ((TSlottedPart) p).getSlotMask();
if (PartMap.face(side.ordinal()).mask == slot) {
if (p instanceof ISticky) {
return ((ISticky) p).isSideSticky(world, x, y, z, side, movement);
} else if (p instanceof FaceMicroblock || p instanceof HollowMicroblock) {
if (((CommonMicroblock) p).getSize() == 1)
return false;
}
} else if (slot == PartMap.CENTER.mask && p instanceof ISticky)
return ((ISticky) p).isSideSticky(world, x, y, z, side, movement);
} else if (p instanceof ISticky)
is |= ((ISticky) p).isSideSticky(world, x, y, z, side, movement);
}
return is;
}
}