From 53b0db1cc460b4f597fd38031475ce4bb81c49a9 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Fri, 28 Dec 2018 13:25:31 -0500 Subject: [PATCH] Change MultipartEntity container to a view --- .../AbstractContainerBlockEntity.java | 20 +++++++++++-------- .../multipart/entity/MultipartEntity.java | 12 ++++------- .../simplemultipart/test/EntityTestPart.java | 8 ++------ .../test/TickableEntityTestPart.java | 6 +----- 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java index b44f4ef..f2f6b57 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java @@ -69,11 +69,13 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement return; } - MultipartEntity entity = null; + + Entry e = new Entry(this, partState, null); if (partState.getMultipart() instanceof MultipartEntityProvider) { - entity = ((MultipartEntityProvider)partState.getMultipart()).createMultipartEntity(partState, this); + e.entity = ((MultipartEntityProvider)partState.getMultipart()).createMultipartEntity(partState, this); + e.entity.view = e; } - parts.add(new Entry(this, partState, entity)); + parts.add(e); updateWorld(); } @@ -128,7 +130,7 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement newContainer.parts = parts.stream() .map(e -> new Entry(newContainer, e.state, e.entity)) .collect(Collectors.toSet()); - newContainer.parts.stream().filter(e -> e.entity != null).forEach(e -> e.entity.container = newContainer); + newContainer.parts.stream().filter(e -> e.entity != null).forEach(e -> e.entity.view = e); } world.markDirty(pos, world.getBlockEntity(pos)); @@ -163,12 +165,14 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement for (Tag tag : list) { CompoundTag compound = (CompoundTag)tag; MultipartState state = MultipartHelper.deserializeMultipartState(compound.getCompound("part")); - MultipartEntity entity = null; + + Entry e = new Entry(this, state, null); if (state.getMultipart() instanceof MultipartEntityProvider && compound.containsKey("entity", NbtType.COMPOUND)) { - entity = ((MultipartEntityProvider)state.getMultipart()).createMultipartEntity(state, this); - entity.fromTag(compound.getCompound("entity")); + e.entity = ((MultipartEntityProvider)state.getMultipart()).createMultipartEntity(state, this); + e.entity.view = e; + e.entity.fromTag(compound.getCompound("entity")); } - parts.add(new Entry(this, state, entity)); + parts.add(e); } } diff --git a/src/main/java/net/shadowfacts/simplemultipart/multipart/entity/MultipartEntity.java b/src/main/java/net/shadowfacts/simplemultipart/multipart/entity/MultipartEntity.java index 448f297..ba72131 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/multipart/entity/MultipartEntity.java +++ b/src/main/java/net/shadowfacts/simplemultipart/multipart/entity/MultipartEntity.java @@ -2,6 +2,7 @@ package net.shadowfacts.simplemultipart.multipart.entity; import net.minecraft.nbt.CompoundTag; import net.shadowfacts.simplemultipart.container.MultipartContainer; +import net.shadowfacts.simplemultipart.multipart.MultipartView; /** * An entity associated with multiparts placed in the world. An instance of the part's entity exists for every in-world @@ -17,20 +18,15 @@ import net.shadowfacts.simplemultipart.container.MultipartContainer; public abstract class MultipartEntity { /** - * The container holding this multipart entity. + * The view of this multipart. */ - // TODO: change this to a view? - public MultipartContainer container; - - public MultipartEntity(MultipartContainer container) { - this.container = container; - } + public MultipartView view; /** * Calling this indicates that something about this entity has changed that necessitates saving it to disk. */ protected void scheduleSave() { - container.schedulePartSave(); + view.getContainer().schedulePartSave(); } /** diff --git a/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java b/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java index 08a7f4d..03f4328 100644 --- a/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java +++ b/src/test/java/net/shadowfacts/simplemultipart/test/EntityTestPart.java @@ -35,16 +35,12 @@ public class EntityTestPart extends Multipart implements MultipartEntityProvider @Override public MultipartEntity createMultipartEntity(MultipartState state, MultipartContainer container) { - return new Entity(container); + return new Entity(); } public static class Entity extends MultipartEntity { - public Entity(MultipartContainer container) { - super(container); - } - public BlockPos getPos() { - return ((AbstractContainerBlockEntity)container).getPos(); + return ((AbstractContainerBlockEntity)view.getContainer()).getPos(); } } diff --git a/src/test/java/net/shadowfacts/simplemultipart/test/TickableEntityTestPart.java b/src/test/java/net/shadowfacts/simplemultipart/test/TickableEntityTestPart.java index 1e1b44b..a786eb6 100644 --- a/src/test/java/net/shadowfacts/simplemultipart/test/TickableEntityTestPart.java +++ b/src/test/java/net/shadowfacts/simplemultipart/test/TickableEntityTestPart.java @@ -34,16 +34,12 @@ public class TickableEntityTestPart extends Multipart implements MultipartEntity @Override public MultipartEntity createMultipartEntity(MultipartState state, MultipartContainer container) { - return new Entity(container); + return new Entity(); } public static class Entity extends MultipartEntity implements Tickable { public int timer = 0; - public Entity(MultipartContainer container) { - super(container); - } - @Override public void tick() { timer++;