Importers and Exporters support covers

This commit is contained in:
Buuz135
2021-09-12 14:59:25 +02:00
parent f555f378db
commit 499fd5b261
9 changed files with 130 additions and 21 deletions

View File

@@ -40,12 +40,6 @@ public class CableNetworkNode extends NetworkNode implements ICoverable {
super.read(tag); super.read(tag);
} }
@Override
public void update() {
super.update();
//WorldUtils.updateBlock(world, pos);
}
@Override @Override
public CompoundNBT write(CompoundNBT tag) { public CompoundNBT write(CompoundNBT tag) {
tag.put("Cover", this.coverManager.writeToNbt()); tag.put("Cover", this.coverManager.writeToNbt());

View File

@@ -1,9 +1,11 @@
package com.refinedmods.refinedstorage.apiimpl.network.node; package com.refinedmods.refinedstorage.apiimpl.network.node;
import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.node.ICoverable;
import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.IComparer;
import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory;
import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler;
import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler;
@@ -27,7 +29,7 @@ import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
public class ExporterNetworkNode extends NetworkNode implements IComparable, IType { public class ExporterNetworkNode extends NetworkNode implements IComparable, IType, ICoverable {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "exporter"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "exporter");
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
@@ -72,8 +74,11 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
private int filterSlot; private int filterSlot;
private CoverManager coverManager;
public ExporterNetworkNode(World world, BlockPos pos) { public ExporterNetworkNode(World world, BlockPos pos) {
super(world, pos); super(world, pos);
this.coverManager = new CoverManager(this);
} }
@Override @Override
@@ -244,9 +249,8 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
@Override @Override
public CompoundNBT write(CompoundNBT tag) { public CompoundNBT write(CompoundNBT tag) {
super.write(tag); super.write(tag);
tag.put("Cover", this.coverManager.writeToNbt());
StackUtils.writeItems(upgrades, 1, tag); StackUtils.writeItems(upgrades, 1, tag);
return tag; return tag;
} }
@@ -267,7 +271,7 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
@Override @Override
public void read(CompoundNBT tag) { public void read(CompoundNBT tag) {
super.read(tag); super.read(tag);
if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover"));
StackUtils.readItems(upgrades, 1, tag); StackUtils.readItems(upgrades, 1, tag);
} }
@@ -320,4 +324,9 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
public FluidInventory getFluidFilters() { public FluidInventory getFluidFilters() {
return fluidFilters; return fluidFilters;
} }
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -1,8 +1,10 @@
package com.refinedmods.refinedstorage.apiimpl.network.node; package com.refinedmods.refinedstorage.apiimpl.network.node;
import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.node.ICoverable;
import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.IComparer;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory;
import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler;
import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler;
@@ -28,7 +30,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
public class ImporterNetworkNode extends NetworkNode implements IComparable, IWhitelistBlacklist, IType { public class ImporterNetworkNode extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, ICoverable {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "importer"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "importer");
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
@@ -47,8 +49,11 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
private int currentSlot; private int currentSlot;
private CoverManager coverManager;
public ImporterNetworkNode(World world, BlockPos pos) { public ImporterNetworkNode(World world, BlockPos pos) {
super(world, pos); super(world, pos);
this.coverManager = new CoverManager(this);
} }
@Override @Override
@@ -148,7 +153,7 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
@Override @Override
public void read(CompoundNBT tag) { public void read(CompoundNBT tag) {
super.read(tag); super.read(tag);
if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover"));
StackUtils.readItems(upgrades, 1, tag); StackUtils.readItems(upgrades, 1, tag);
} }
@@ -160,7 +165,7 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
@Override @Override
public CompoundNBT write(CompoundNBT tag) { public CompoundNBT write(CompoundNBT tag) {
super.write(tag); super.write(tag);
tag.put("Cover", this.coverManager.writeToNbt());
StackUtils.writeItems(upgrades, 1, tag); StackUtils.writeItems(upgrades, 1, tag);
return tag; return tag;
@@ -234,4 +239,9 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
public FluidInventory getFluidFilters() { public FluidInventory getFluidFilters() {
return fluidFilters; return fluidFilters;
} }
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -69,15 +69,16 @@ public class ExporterBlock extends CableBlock {
@Override @Override
public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) { public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) {
return ShapeCache.getOrCreate(state, s -> { return ConstantsCable.addCoverVoxelShapes(ShapeCache.getOrCreate(state, s -> {
VoxelShape shape = getCableShape(s); VoxelShape shape = getCableShape(s);
shape = VoxelShapes.or(shape, getLineShape(s)); shape = VoxelShapes.or(shape, getLineShape(s));
return ConstantsCable.addCoverVoxelShapes(shape, world, pos); return shape;
}); }), world, pos);
} }
private VoxelShape getLineShape(BlockState state) { private VoxelShape getLineShape(BlockState state) {
Direction direction = state.get(getDirection().getProperty()); Direction direction = state.get(getDirection().getProperty());

View File

@@ -69,13 +69,13 @@ public class ImporterBlock extends CableBlock {
@Override @Override
public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) { public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) {
return ShapeCache.getOrCreate(state, s -> { return ConstantsCable.addCoverVoxelShapes(ShapeCache.getOrCreate(state, s -> {
VoxelShape shape = getCableShape(s); VoxelShape shape = getCableShape(s);
shape = VoxelShapes.or(shape, getLineShape(s)); shape = VoxelShapes.or(shape, getLineShape(s));
return ConstantsCable.addCoverVoxelShapes(shape, world, pos); return shape;
}); }), world, pos);
} }
private VoxelShape getLineShape(BlockState state) { private VoxelShape getLineShape(BlockState state) {

View File

@@ -112,6 +112,8 @@ public class ClientSetup {
new ResourceLocation(RS.ID, "block/disks/leds") new ResourceLocation(RS.ID, "block/disks/leds")
)); ));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "cable"), (base, registry) -> new BakedModelCableCover(base)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "cable"), (base, registry) -> new BakedModelCableCover(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "exporter"), (base, registry) -> new BakedModelCableCover(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "importer"), (base, registry) -> new BakedModelCableCover(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "cover"), (base, registry) -> new BakedModelCover(ItemStack.EMPTY, CoverType.NORMAL)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "cover"), (base, registry) -> new BakedModelCover(ItemStack.EMPTY, CoverType.NORMAL));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "hollow_cover"), (base, registry) -> new BakedModelCover(ItemStack.EMPTY, CoverType.HOLLOW)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "hollow_cover"), (base, registry) -> new BakedModelCover(ItemStack.EMPTY, CoverType.HOLLOW));

View File

@@ -30,8 +30,10 @@ import java.util.HashMap;
public class CableTile extends NetworkNodeTile<CableNetworkNode> { public class CableTile extends NetworkNodeTile<CableNetworkNode> {
public static final TileDataParameter<CompoundNBT, CableTile> COVER_MANAGER = new TileDataParameter<>(DataSerializers.COMPOUND_NBT, new CompoundNBT(), t -> t.getNode().getCoverManager().writeToNbt(), (t, v) -> t.getNode().getCoverManager().readFromNbt(v), (initial, p) -> Minecraft.getInstance().enqueue(() -> { public static final TileDataParameter<CompoundNBT, CableTile> COVER_MANAGER = new TileDataParameter<>(DataSerializers.COMPOUND_NBT, new CompoundNBT(),
t -> t.getNode().getCoverManager().writeToNbt(),
(t, v) -> t.getNode().getCoverManager().readFromNbt(v),
(initial, p) -> Minecraft.getInstance().enqueue(() -> {
})); }));
static { static {

View File

@@ -2,23 +2,43 @@ package com.refinedmods.refinedstorage.tile;
import com.refinedmods.refinedstorage.RSTiles; import com.refinedmods.refinedstorage.RSTiles;
import com.refinedmods.refinedstorage.apiimpl.network.node.ExporterNetworkNode; import com.refinedmods.refinedstorage.apiimpl.network.node.ExporterNetworkNode;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.tile.config.IComparable; import com.refinedmods.refinedstorage.tile.config.IComparable;
import com.refinedmods.refinedstorage.tile.config.IType; import com.refinedmods.refinedstorage.tile.config.IType;
import com.refinedmods.refinedstorage.tile.data.TileDataManager;
import com.refinedmods.refinedstorage.tile.data.TileDataParameter; import com.refinedmods.refinedstorage.tile.data.TileDataParameter;
import com.refinedmods.refinedstorage.util.WorldUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public class ExporterTile extends NetworkNodeTile<ExporterNetworkNode> { public class ExporterTile extends NetworkNodeTile<ExporterNetworkNode> {
public static final TileDataParameter<CompoundNBT, ExporterTile> COVER_MANAGER = new TileDataParameter<>(DataSerializers.COMPOUND_NBT, new CompoundNBT(),
t -> t.getNode().getCoverManager().writeToNbt(),
(t, v) -> t.getNode().getCoverManager().readFromNbt(v),
(initial, p) -> Minecraft.getInstance().enqueue(() -> {
}));
public static final TileDataParameter<Integer, ExporterTile> COMPARE = IComparable.createParameter(); public static final TileDataParameter<Integer, ExporterTile> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer, ExporterTile> TYPE = IType.createParameter(); public static final TileDataParameter<Integer, ExporterTile> TYPE = IType.createParameter();
static {
TileDataManager.registerParameter(COVER_MANAGER);
}
public ExporterTile() { public ExporterTile() {
super(RSTiles.EXPORTER); super(RSTiles.EXPORTER);
dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(TYPE);
dataManager.addWatchedParameter(COVER_MANAGER);
} }
@Override @Override
@@ -26,4 +46,29 @@ public class ExporterTile extends NetworkNodeTile<ExporterNetworkNode> {
public ExporterNetworkNode createNode(World world, BlockPos pos) { public ExporterNetworkNode createNode(World world, BlockPos pos) {
return new ExporterNetworkNode(world, pos); return new ExporterNetworkNode(world, pos);
} }
@Nonnull
@Override
public IModelData getModelData() {
return new ModelDataMap.Builder().withInitial(CoverManager.PROPERTY, this.getNode().getCoverManager()).build();
}
@Override
public CompoundNBT writeUpdate(CompoundNBT tag) {
super.writeUpdate(tag);
tag.put("Covers", this.getNode().getCoverManager().writeToNbt());
return tag;
}
@Override
public void readUpdate(CompoundNBT tag) {
super.readUpdate(tag);
this.getNode().getCoverManager().readFromNbt(tag.getCompound("Covers"));
requestModelDataUpdate();
WorldUtils.updateBlock(world, pos);
}
} }

View File

@@ -2,12 +2,20 @@ package com.refinedmods.refinedstorage.tile;
import com.refinedmods.refinedstorage.RSTiles; import com.refinedmods.refinedstorage.RSTiles;
import com.refinedmods.refinedstorage.apiimpl.network.node.ImporterNetworkNode; import com.refinedmods.refinedstorage.apiimpl.network.node.ImporterNetworkNode;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.tile.config.IComparable; import com.refinedmods.refinedstorage.tile.config.IComparable;
import com.refinedmods.refinedstorage.tile.config.IType; import com.refinedmods.refinedstorage.tile.config.IType;
import com.refinedmods.refinedstorage.tile.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.tile.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.tile.data.TileDataManager;
import com.refinedmods.refinedstorage.tile.data.TileDataParameter; import com.refinedmods.refinedstorage.tile.data.TileDataParameter;
import com.refinedmods.refinedstorage.util.WorldUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -16,12 +24,24 @@ public class ImporterTile extends NetworkNodeTile<ImporterNetworkNode> {
public static final TileDataParameter<Integer, ImporterTile> WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter(); public static final TileDataParameter<Integer, ImporterTile> WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter();
public static final TileDataParameter<Integer, ImporterTile> TYPE = IType.createParameter(); public static final TileDataParameter<Integer, ImporterTile> TYPE = IType.createParameter();
public static final TileDataParameter<CompoundNBT, ImporterTile> COVER_MANAGER = new TileDataParameter<>(DataSerializers.COMPOUND_NBT, new CompoundNBT(),
t -> t.getNode().getCoverManager().writeToNbt(),
(t, v) -> t.getNode().getCoverManager().readFromNbt(v),
(initial, p) -> Minecraft.getInstance().enqueue(() -> {
}));
static {
TileDataManager.registerParameter(COVER_MANAGER);
}
public ImporterTile() { public ImporterTile() {
super(RSTiles.IMPORTER); super(RSTiles.IMPORTER);
dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(WHITELIST_BLACKLIST); dataManager.addWatchedParameter(WHITELIST_BLACKLIST);
dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(TYPE);
dataManager.addWatchedParameter(COVER_MANAGER);
} }
@Override @Override
@@ -29,4 +49,30 @@ public class ImporterTile extends NetworkNodeTile<ImporterNetworkNode> {
public ImporterNetworkNode createNode(World world, BlockPos pos) { public ImporterNetworkNode createNode(World world, BlockPos pos) {
return new ImporterNetworkNode(world, pos); return new ImporterNetworkNode(world, pos);
} }
@Nonnull
@Override
public IModelData getModelData() {
return new ModelDataMap.Builder().withInitial(CoverManager.PROPERTY, this.getNode().getCoverManager()).build();
}
@Override
public CompoundNBT writeUpdate(CompoundNBT tag) {
super.writeUpdate(tag);
tag.put("Covers", this.getNode().getCoverManager().writeToNbt());
return tag;
}
@Override
public void readUpdate(CompoundNBT tag) {
super.readUpdate(tag);
this.getNode().getCoverManager().readFromNbt(tag.getCompound("Covers"));
requestModelDataUpdate();
WorldUtils.updateBlock(world, pos);
}
} }