One more fix for connecting panels using connectors after the panel and the controller have been placed

This commit is contained in:
malte0811 2017-07-10 20:50:16 +02:00
parent f97bec3d44
commit f8f53d2434
2 changed files with 10 additions and 8 deletions

View file

@ -303,7 +303,7 @@ public class TileEntityPanel extends TileEntityIWBase implements IDirectionalTil
public void removeAllRSCons() { public void removeAllRSCons() {
for (TileEntityRSPanelConn rs : rsPorts) { for (TileEntityRSPanelConn rs : rsPorts) {
rs.unregisterPanel(this, true); rs.unregisterPanel(this, true, false);
} }
rsPorts.clear(); rsPorts.clear();
firstTick = true; firstTick = true;

View file

@ -166,7 +166,7 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
Consumer<byte[]> listener = pc.getRSInputHandler(id, panel); Consumer<byte[]> listener = pc.getRSInputHandler(id, panel);
if (listener != null) { if (listener != null) {
changeListeners.add(listener); changeListeners.add(listener);
listener.accept(out); listener.accept(network.channelValues);
} }
pc.registerRSOutput(id, rsOut); pc.registerRSOutput(id, rsOut);
} }
@ -174,19 +174,21 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
connectedPanels.add(panel); connectedPanels.add(panel);
} }
public void unregisterPanel(TileEntityPanel panel, boolean remove) { public void unregisterPanel(TileEntityPanel panel, boolean remove, boolean callPanel) {
out = new byte[16]; out = new byte[16];
PropertyComponents.PanelRenderProperties p = panel.getComponents(); PropertyComponents.PanelRenderProperties p = panel.getComponents();
for (PanelComponent pc : p) { for (PanelComponent pc : p) {
Consumer<byte[]> listener = pc.getRSInputHandler(id, panel); Consumer<byte[]> listener = pc.getRSInputHandler(id, panel);
if (listener != null) { if (listener != null) {
listener.accept(out); listener.accept(new byte[16]);
changeListeners.remove(listener); changeListeners.remove(listener);
} }
pc.unregisterRSOutput(id, rsOut); pc.unregisterRSOutput(id, rsOut);
outputs.remove(new PCWrapper(pc)); outputs.remove(new PCWrapper(pc));
} }
panel.unregisterRS(this); if (callPanel) {
panel.unregisterRS(this);
}
if (remove) { if (remove) {
connectedPanels.remove(panel); connectedPanels.remove(panel);
} }
@ -282,7 +284,7 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
public void onChunkUnload() { public void onChunkUnload() {
super.onChunkUnload(); super.onChunkUnload();
for (TileEntityPanel panel : connectedPanels) { for (TileEntityPanel panel : connectedPanels) {
unregisterPanel(panel, false); unregisterPanel(panel, false, true);
} }
} }
@ -290,7 +292,7 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
public void invalidate() { public void invalidate() {
super.invalidate(); super.invalidate();
for (TileEntityPanel panel : connectedPanels) { for (TileEntityPanel panel : connectedPanels) {
unregisterPanel(panel, false); unregisterPanel(panel, false, true);
} }
} }
@ -303,7 +305,7 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
TileEntity te = world.getTileEntity(bp); TileEntity te = world.getTileEntity(bp);
if (te instanceof TileEntityPanel) { if (te instanceof TileEntityPanel) {
tes.add((TileEntityPanel) te); tes.add((TileEntityPanel) te);
unregisterPanel((TileEntityPanel) te, true); unregisterPanel((TileEntityPanel) te, true, true);
} }
} }
id = nbt.getInteger("rsId"); id = nbt.getInteger("rsId");