package openmods.gui;
import openmods.container.ContainerBase;
import openmods.gui.logic.IValueUpdateAction;
import openmods.gui.logic.SyncObjectUpdateDispatcher;
import openmods.sync.ISyncMapProvider;
public class SyncedGuiContainer<T extends ContainerBase<? extends ISyncMapProvider>> extends BaseGuiContainer<T> {
private SyncObjectUpdateDispatcher dispatcher;
public SyncedGuiContainer(T container, int width, int height, String name) {
super(container, width, height, name);
if (dispatcher != null) dispatcher.triggerAll();
}
protected SyncObjectUpdateDispatcher dispatcher() {
if (dispatcher == null) {
dispatcher = new SyncObjectUpdateDispatcher();
getContainer().getOwner().getSyncMap().addUpdateListener(dispatcher);
}
return dispatcher;
}
public void addSyncUpdateListener(IValueUpdateAction action) {
dispatcher().addAction(action);
}
@Override
public void onGuiClosed() {
super.onGuiClosed();
if (dispatcher != null) getContainer().getOwner().getSyncMap().removeUpdateListener(dispatcher);
}
}