diff --git a/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java index ad6c483..ea1fb20 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java +++ b/src/main/java/net/shadowfacts/simplemultipart/api/MultipartContainer.java @@ -15,9 +15,9 @@ public interface MultipartContainer { void insert(MultipartState state); - void remove(MultipartState state); + void remove(MultipartView view); - boolean breakPart(MultipartState state); + boolean breakPart(MultipartView view); void schedulePartSave(); diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java index 77de8ca..d49b85f 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java @@ -75,8 +75,12 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement } @Override - public void remove(MultipartState partState) { - parts.removeIf(e -> e.state == partState); + public void remove(MultipartView view) { + if (view.getContainer() != this) { + return; + } + + parts.removeIf(e -> e.state == view.getState() && e.entity == view.getEntity()); if (parts.isEmpty()) { world.setBlockState(pos, Blocks.AIR.getDefaultState()); @@ -86,8 +90,8 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement } @Override - public boolean breakPart(MultipartState partState) { - Optional entry = parts.stream().filter(e -> e.state == partState).findFirst(); + public boolean breakPart(MultipartView view) { + Optional entry = parts.stream().filter(e -> e.state == view.getState() && e.entity == view.getEntity()).findFirst(); if (!entry.isPresent()) { return false; } @@ -98,7 +102,7 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement // TODO: don't drop if player is creative } - remove(partState); + remove(view); updateWorld(); diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/ContainerEventHandler.java b/src/main/java/net/shadowfacts/simplemultipart/container/ContainerEventHandler.java index ef74789..44ab008 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/ContainerEventHandler.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/ContainerEventHandler.java @@ -37,7 +37,7 @@ public class ContainerEventHandler { return ActionResult.FAILURE; } - boolean success = container.breakPart(hit.view.getState()); + boolean success = container.breakPart(hit.view); return success ? ActionResult.SUCCESS : ActionResult.FAILURE; }