diff --git a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/BlockEntityCoordinator.java b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/BlockEntityCoordinator.java deleted file mode 100644 index 6916a789..00000000 --- a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/BlockEntityCoordinator.java +++ /dev/null @@ -1,11 +0,0 @@ -package band.kessoku.lib.api.blockentity; - -import band.kessoku.lib.api.data.DataStructure; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; - -public class BlockEntityCoordinator { - public static void add(BlockEntityType type, BlockEntityAccess access) { - - } -} diff --git a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinator.java b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinator.java new file mode 100644 index 00000000..b01a02e5 --- /dev/null +++ b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinator.java @@ -0,0 +1,28 @@ +package band.kessoku.lib.api.blockentity; + +import band.kessoku.lib.api.data.DataStructure; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.commons.lang3.function.TriFunction; + +import java.util.HashMap; +import java.util.Map; + +public class Coordinator { + private final Map, TriFunction, World, BlockPos, S>> map = new HashMap<>(); + + public void add(BlockEntityType type, BlockEntityAccess access) { + map.put(type, ((t, world, blockPos) -> { + if (t == type) { + return access.to(type.get(world, blockPos)); + } + return null; + })); + } + + public S get(BlockEntityType type, World world, BlockPos pos) { + return map.get(type).apply(type, world, pos); + } +} diff --git a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinators.java b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinators.java new file mode 100644 index 00000000..24dadd73 --- /dev/null +++ b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/Coordinators.java @@ -0,0 +1,10 @@ +package band.kessoku.lib.api.blockentity; + +import band.kessoku.lib.api.data.Storage; +import band.kessoku.lib.impl.ItemSidinator; +import net.minecraft.item.ItemStack; + +public class Coordinators { + public static final Coordinator> ITEM = new Coordinator<>(); + public static final Coordinator ITEM_SIDE = new Coordinator<>(); +} diff --git a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/KessokuBlockEntity.java b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/KessokuBlockEntity.java index e27dcd38..3c040549 100644 --- a/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/KessokuBlockEntity.java +++ b/blockentity/common/src/main/java/band/kessoku/lib/api/blockentity/KessokuBlockEntity.java @@ -27,9 +27,9 @@ public class KessokuBlockEntity { public static final Marker MARKER = MarkerFactory.getMarker("[" + NAME +"]"); public void init() { - BlockEntityCoordinator.add(BlockEntityType.FURNACE, Storage::inventory); - BlockEntityCoordinator.add(BlockEntityType.CHEST, Storage::inventory); - BlockEntityCoordinator.add( + Coordinators.ITEM.add(BlockEntityType.FURNACE, Storage::inventory); + Coordinators.ITEM.add(BlockEntityType.CHEST, Storage::inventory); + Coordinators.ITEM_SIDE.add( BlockEntityType.FURNACE, (blockentity) -> ItemSidinator.builder().side(1).bottom(2, 1).top(0).build() ); diff --git a/data/common/src/main/java/band/kessoku/lib/api/data/DataAccess.java b/data/common/src/main/java/band/kessoku/lib/api/data/DataAccess.java index 602f4685..66b0a2aa 100644 --- a/data/common/src/main/java/band/kessoku/lib/api/data/DataAccess.java +++ b/data/common/src/main/java/band/kessoku/lib/api/data/DataAccess.java @@ -17,5 +17,5 @@ @FunctionalInterface public interface DataAccess { - S get(T target); + S to(T target); }