diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java b/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java index a701c0a..3233d72 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java @@ -41,7 +41,7 @@ public void addInformation(ItemStack itemStack, EntityPlayer player, List toolTipClass = container.getTooltipClass(); if (toolTipClass == null) return; - Entity entity = container.getOriginalEntity(); + Entity entity = container.getFakeEntity(); TooltipAssigner tooltipData = entity.get(toolTipClass); tooltipData.assignTooltip(tooltip); } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentContainer.java b/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentContainer.java new file mode 100644 index 0000000..2326e8e --- /dev/null +++ b/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentContainer.java @@ -0,0 +1,30 @@ +package com.gtnewhorizons.mutecore.api.registry; + +import java.lang.reflect.Constructor; + +import com.gtnewhorizons.mutecore.MuTECore; + +public class ComponentContainer { + + private final Class clazz; + private final Object[] constructorArgs; + + public ComponentContainer(Class clazz, Object... constructorArgs) { + this.clazz = clazz; + this.constructorArgs = constructorArgs; + } + + public Object create() { + try { + Class[] argTypes = new Class[constructorArgs.length]; + for (int i = 0; i < constructorArgs.length; i++) { + argTypes[i] = constructorArgs[i].getClass(); + } + Constructor constructor = clazz.getDeclaredConstructor(argTypes); + return constructor.newInstance(constructorArgs); + } catch (Exception e) { + MuTECore.LOG.error(e.getMessage()); + return null; + } + } +} diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java index abb0a79..8a7a328 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java @@ -1,6 +1,10 @@ package com.gtnewhorizons.mutecore.api.registry; import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -21,7 +25,8 @@ public class MultiTileContainer { private final @Nonnull Class clazz; private final int id; private final @Nonnull WeakReference reg; - private final @Nonnull Entity originalEntity; + private final Set components; + private final @Nonnull Entity fakeEntity; private Class tooltipClass; private @Nonnull MuTEGUI gui; private String unlocalizedName; @@ -31,12 +36,14 @@ public MultiTileContainer(@Nonnull MultiTileEntityRegistry reg, int id, this.reg = new WeakReference<>(reg); this.clazz = clazz; this.id = id; - originalEntity = MuTECore.ENGINE.createEntity(new FakeEntity()); + fakeEntity = MuTECore.ENGINE.createEntity(new FakeEntity()); + components = new HashSet<>(); } - public @Nonnull MultiTileContainer addComponents(Object... components) { - for (Object component : components) { - originalEntity.add(component); + public @Nonnull MultiTileContainer addComponents(ComponentContainer... components) { + for (ComponentContainer component : components) { + this.components.add(component); + fakeEntity.add(component.create()); } return this; } @@ -63,8 +70,13 @@ public boolean register() { } public @Nonnull Entity createNewEntity() { - Entity newEntity = MuTECore.ENGINE.createEntityAs(originalEntity); - newEntity.removeType(FakeEntity.class); + List components = new ArrayList<>(); + for (ComponentContainer componentContainer : this.components) { + Object component = componentContainer.create(); + if (component == null) continue; + components.add(component); + } + Entity newEntity = MuTECore.ENGINE.createEntity(components.toArray()); newEntity.add( new Id( id, @@ -100,8 +112,8 @@ public Class getTooltipClass() { return tooltipClass; } - public Entity getOriginalEntity() { - return originalEntity; + public Entity getFakeEntity() { + return fakeEntity; } @Override diff --git a/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java b/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java index 4b4baad..551b741 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java +++ b/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java @@ -35,7 +35,7 @@ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderB GL11.glTranslatef(-0.5F, -0.5F, -0.5F); MultiTileEntityRegistry reg = mublock.getRegistry(); - reg.getRender(metadata).render(reg.getMultiTileContainer(metadata).getOriginalEntity(), renderer, 0, 0, 0, null); + reg.getRender(metadata).render(reg.getMultiTileContainer(metadata).getFakeEntity(), renderer, 0, 0, 0, null); GL11.glTranslatef(0.5F, 0.5F, 0.5F); }