From b334e6987e7c3041e0c5e32841873b11ae9f2cdd Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 25 Dec 2018 10:25:51 -0500 Subject: [PATCH] Extract MultipartContainer into its own interface --- .../api/MultipartContainer.java | 22 +++++++++++++++++++ .../simplemultipart/api/MultipartView.java | 3 +-- .../MultipartContainerBlockEntity.java | 12 +++++++++- .../simplemultipart/test/EntityTestPart.java | 9 ++++---- 4 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java diff --git a/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java new file mode 100644 index 0000000..06a3f09 --- /dev/null +++ b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java @@ -0,0 +1,22 @@ +package net.shadowfacts.simplemultipart.api; + +import net.shadowfacts.simplemultipart.multipart.MultipartState; + +import java.util.Set; + +/** + * @author shadowfacts + */ +public interface MultipartContainer { + + Set getParts(); + + boolean canInsert(MultipartState state); + + void insert(MultipartState state); + + void remove(MultipartState state); + + boolean breakPart(MultipartState state); + +} diff --git a/src/main/java/net/shadowfacts/simplemultipart/api/MultipartView.java b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartView.java index 37d2926..d85ac60 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/api/MultipartView.java +++ b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartView.java @@ -1,6 +1,5 @@ package net.shadowfacts.simplemultipart.api; -import net.shadowfacts.simplemultipart.container.MultipartContainerBlockEntity; import net.shadowfacts.simplemultipart.multipart.Multipart; import net.shadowfacts.simplemultipart.multipart.MultipartState; import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntity; @@ -11,7 +10,7 @@ import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntity; // TODO: better name for this public interface MultipartView { - MultipartContainerBlockEntity getContainer(); + MultipartContainer getContainer(); MultipartState getState(); diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlockEntity.java b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlockEntity.java index 2d8a626..a8f76ec 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlockEntity.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlockEntity.java @@ -17,6 +17,7 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.loot.context.LootContext; import net.minecraft.world.loot.context.Parameters; import net.shadowfacts.simplemultipart.SimpleMultipart; +import net.shadowfacts.simplemultipart.api.MultipartContainer; import net.shadowfacts.simplemultipart.multipart.MultipartState; import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntity; import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntityProvider; @@ -29,7 +30,7 @@ import java.util.*; /** * @author shadowfacts */ -public class MultipartContainerBlockEntity extends BlockEntity implements ClientSerializable { +public class MultipartContainerBlockEntity extends BlockEntity implements MultipartContainer, ClientSerializable { private Set parts = new HashSet<>(); @@ -37,10 +38,12 @@ public class MultipartContainerBlockEntity extends BlockEntity implements Client super(SimpleMultipart.containerBlockEntity); } + @Override public Set getParts() { return ImmutableSet.copyOf(parts); } + @Override public boolean canInsert(MultipartState partState) { VoxelShape newShape = partState.getBoundingShape(null); for (Entry e : parts) { @@ -53,7 +56,12 @@ public class MultipartContainerBlockEntity extends BlockEntity implements Client return true; } + @Override public void insert(MultipartState partState) { + if (!canInsert(partState)) { + return; + } + MultipartEntity entity = null; if (partState.getMultipart() instanceof MultipartEntityProvider) { entity = ((MultipartEntityProvider)partState.getMultipart()).createMultipartEntity(partState, this); @@ -63,6 +71,7 @@ public class MultipartContainerBlockEntity extends BlockEntity implements Client world.scheduleBlockRender(pos); } + @Override public void remove(MultipartState partState) { parts.removeIf(e -> e.state == partState); @@ -71,6 +80,7 @@ public class MultipartContainerBlockEntity extends BlockEntity implements Client } } + @Override public boolean breakPart(MultipartState partState) { Optional entry = parts.stream().filter(e -> e.state == partState).findFirst(); if (!entry.isPresent()) { diff --git a/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java b/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java index 7f26893..4fb9dbc 100644 --- a/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java +++ b/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java @@ -13,14 +13,13 @@ import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntity; import net.shadowfacts.simplemultipart.multipart.entity.MultipartEntityProvider; import net.shadowfacts.simplemultipart.api.MultipartView; -import java.util.function.Function; - /** * @author shadowfacts */ -public class EntityTestPart extends Multipart implements MultipartEntityProvider { +public class EntityTestPart extends Multipart implements MultipartEntityProvider { @Override + @Deprecated public VoxelShape getBoundingShape(MultipartState state, MultipartView view) { return VoxelShapes.cube(6/16f, 6/16f, 6/16f, 10/16f, 10/16f, 10/16f); } @@ -34,8 +33,8 @@ public class EntityTestPart extends Multipart implements MultipartEntityProvider } @Override - public Function getMultipartEntityFactory() { - return Entity::new; + public MultipartEntity createMultipartEntity(MultipartState state, MultipartContainerBlockEntity container) { + return new Entity(container); } public static class Entity extends MultipartEntity {