Implement support for redstone mode in portable grid inworld

This commit is contained in:
raoulvdberge
2017-05-12 00:32:35 +02:00
parent 39749eef68
commit 50671435a8

View File

@@ -24,6 +24,8 @@ import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
import com.raoulvdberge.refinedstorage.item.filter.Filter; import com.raoulvdberge.refinedstorage.item.filter.Filter;
import com.raoulvdberge.refinedstorage.item.filter.FilterTab; import com.raoulvdberge.refinedstorage.item.filter.FilterTab;
import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.TileBase;
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
@@ -47,7 +49,7 @@ import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, IRedstoneConfigurable {
public static final TileDataParameter<Integer> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { public static final TileDataParameter<Integer> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() {
@Override @Override
public Integer getValue(TilePortableGrid tile) { public Integer getValue(TilePortableGrid tile) {
@@ -140,11 +142,15 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
} }
}); });
public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter();
private static final String NBT_ENERGY = "Energy"; private static final String NBT_ENERGY = "Energy";
private EnergyForge energyStorage = new EnergyForge(3200); private EnergyForge energyStorage = new EnergyForge(3200);
private PortableGridType type; private PortableGridType type;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private int sortingType; private int sortingType;
private int sortingDirection; private int sortingDirection;
private int searchBoxMode; private int searchBoxMode;
@@ -197,6 +203,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
dataManager.addWatchedParameter(SEARCH_BOX_MODE); dataManager.addWatchedParameter(SEARCH_BOX_MODE);
dataManager.addWatchedParameter(SIZE); dataManager.addWatchedParameter(SIZE);
dataManager.addWatchedParameter(TAB_SELECTED); dataManager.addWatchedParameter(TAB_SELECTED);
dataManager.addWatchedParameter(REDSTONE_MODE);
} }
public PortableGridType getPortableType() { public PortableGridType getPortableType() {
@@ -222,6 +229,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
RSUtils.readItems(disk, 4, stack.getTagCompound()); RSUtils.readItems(disk, 4, stack.getTagCompound());
this.redstoneMode = RedstoneMode.read(stack.getTagCompound());
markDirty(); markDirty();
} }
@@ -248,6 +257,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
RSUtils.writeItems(disk, 4, stack.getTagCompound()); RSUtils.writeItems(disk, 4, stack.getTagCompound());
redstoneMode.write(stack.getTagCompound());
return stack; return stack;
} }
@@ -370,7 +381,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
@Override @Override
public TileDataParameter<Integer> getRedstoneModeConfig() { public TileDataParameter<Integer> getRedstoneModeConfig() {
return null; return REDSTONE_MODE;
} }
@Override @Override
@@ -416,7 +427,9 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
return false; return false;
} }
return true; RedstoneMode redstoneMode = !getWorld().isRemote ? this.redstoneMode : RedstoneMode.getById(REDSTONE_MODE.getValue());
return redstoneMode.isEnabled(getWorld(), pos);
} }
@Override @Override
@@ -436,7 +449,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
@Override @Override
public void drainEnergy(int energy) { public void drainEnergy(int energy) {
if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE) { if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE && redstoneMode.isEnabled(getWorld(), pos)) {
energyStorage.extractEnergyInternal(energy); energyStorage.extractEnergyInternal(energy);
} }
} }
@@ -465,6 +478,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
tag.setInteger(NBT_ENERGY, energyStorage.getEnergyStored()); tag.setInteger(NBT_ENERGY, energyStorage.getEnergyStored());
redstoneMode.write(tag);
return tag; return tag;
} }
@@ -498,6 +513,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
if (tag.hasKey(NBT_ENERGY)) { if (tag.hasKey(NBT_ENERGY)) {
energyStorage.setEnergyStored(tag.getInteger(NBT_ENERGY)); energyStorage.setEnergyStored(tag.getInteger(NBT_ENERGY));
} }
redstoneMode = RedstoneMode.read(tag);
} }
@Override @Override
@@ -520,4 +537,16 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid {
drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); drainEnergy(RS.INSTANCE.config.portableGridOpenUsage);
} }
@Override
public RedstoneMode getRedstoneMode() {
return redstoneMode;
}
@Override
public void setRedstoneMode(RedstoneMode mode) {
this.redstoneMode = mode;
markDirty();
}
} }