package com.jaquadro.minecraft.gardencore.block.support; import com.jaquadro.minecraft.gardencore.api.block.garden.ISlotMapping; import com.jaquadro.minecraft.gardencore.api.block.garden.ISlotShareProfile; public class SlotShare8Profile implements ISlotShareProfile { int indexBase; ISlotMapping[][] map; public SlotShare8Profile (int slotXZNN, int slotZN, int slotXZPN, int slotXP, int slotXZPP, int slotZP, int slotXZNP, int slotXN) { indexBase = min(slotXZNN, slotZN, slotXZPN, slotXP, slotXZPP, slotZP, slotXZNP, slotXN); int length = max(slotXZNN, slotZN, slotXZPN, slotXP, slotXZPP, slotZP, slotXZNP, slotXN) - indexBase + 1; map = new ISlotMapping[length][]; map[slotZN - indexBase] = new ISlotMapping[] { new SlotMapping(slotZN, slotZP, 0, -1) }; map[slotXP - indexBase] = new ISlotMapping[] { new SlotMapping(slotXP, slotXN, 1, 0) }; map[slotZP - indexBase] = new ISlotMapping[] { new SlotMapping(slotZP, slotZN, 0, 1) }; map[slotXN - indexBase] = new ISlotMapping[] { new SlotMapping(slotXN, slotXP, -1, 0) }; map[slotXZNN - indexBase] = new SlotMapping[] { new SlotMapping(slotXZNN, slotXZPN, -1, 0), new SlotMapping(slotXZNN, slotXZNP, 0, -1), new SlotMapping(slotXZNN, slotXZPP, -1, -1) }; map[slotXZPN - indexBase] = new SlotMapping[] { new SlotMapping(slotXZPN, slotXZNN, 1, 0), new SlotMapping(slotXZPN, slotXZPP, 0, -1), new SlotMapping(slotXZPN, slotXZNP, 1, -1) }; map[slotXZPP - indexBase] = new SlotMapping[] { new SlotMapping(slotXZPP, slotXZNP, 1, 0), new SlotMapping(slotXZPP, slotXZPN, 0, 1), new SlotMapping(slotXZPP, slotXZNN, 1, 1) }; map[slotXZNP - indexBase] = new SlotMapping[] { new SlotMapping(slotXZNP, slotXZPP, -1, 0), new SlotMapping(slotXZNP, slotXZNN, 0, 1), new SlotMapping(slotXZNP, slotXZPN, -1, 1) }; } @Override public ISlotMapping[] getNeighborsForSlot (int slot) { if (slot < indexBase || slot >= indexBase + map.length) return null; return map[slot - indexBase]; } private int min (int... values) { int minValue = Integer.MAX_VALUE; for (int val : values) minValue = Math.min(minValue, val); return minValue; } private int max (int... values) { int maxValue = Integer.MIN_VALUE; for (int val : values) maxValue = Math.max(maxValue, val); return maxValue; } }