From 7cf838d7426bb3f7acf0bf2c4906e7bed10859e9 Mon Sep 17 00:00:00 2001 From: Buuz135 Date: Sun, 12 Sep 2021 22:16:48 +0200 Subject: [PATCH] Added cover support for the constructor and destructor --- .../network/node/ConstructorNetworkNode.java | 16 ++++++- .../network/node/DestructorNetworkNode.java | 16 ++++++- .../network/node/ExporterNetworkNode.java | 4 ++ .../network/node/ImporterNetworkNode.java | 4 ++ .../block/ConstructorBlock.java | 6 +-- .../refinedstorage/block/DestructorBlock.java | 6 +-- .../refinedstorage/setup/ClientSetup.java | 4 +- .../refinedstorage/tile/CableTile.java | 3 +- .../refinedstorage/tile/ConstructorTile.java | 43 +++++++++++++++++++ .../refinedstorage/tile/DestructorTile.java | 42 ++++++++++++++++++ .../refinedstorage/tile/ExporterTile.java | 3 +- .../refinedstorage/tile/ImporterTile.java | 6 +-- 12 files changed, 135 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java index 143f1392b..c4c5b6012 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java @@ -1,8 +1,10 @@ package com.refinedmods.refinedstorage.apiimpl.network.node; 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.IComparer; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; @@ -43,7 +45,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import javax.annotation.Nullable; -public class ConstructorNetworkNode extends NetworkNode implements IComparable, IType { +public class ConstructorNetworkNode extends NetworkNode implements IComparable, IType, ICoverable { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "constructor"); private static final String NBT_COMPARE = "Compare"; @@ -64,8 +66,11 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, private int type = IType.ITEMS; private boolean drop = false; + private CoverManager coverManager; + public ConstructorNetworkNode(World world, BlockPos pos) { super(world, pos); + this.coverManager = new CoverManager(this); } @Override @@ -174,6 +179,8 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, public void read(CompoundNBT tag) { super.read(tag); + if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover")); + StackUtils.readItems(upgrades, 1, tag); } @@ -186,6 +193,8 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, public CompoundNBT write(CompoundNBT tag) { super.write(tag); + tag.put("Cover", this.coverManager.writeToNbt()); + StackUtils.writeItems(upgrades, 1, tag); return tag; @@ -268,6 +277,11 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, return fluidFilters; } + @Override + public CoverManager getCoverManager() { + return coverManager; + } + private class NetworkFluidHandler implements IFluidHandler { private final FluidStack resource; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java index 2ad795f7c..9705edd0f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java @@ -1,8 +1,10 @@ package com.refinedmods.refinedstorage.apiimpl.network.node; 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.IComparer; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; @@ -47,7 +49,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import java.util.ArrayList; import java.util.List; -public class DestructorNetworkNode extends NetworkNode implements IComparable, IWhitelistBlacklist, IType { +public class DestructorNetworkNode extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, ICoverable { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "destructor"); private static final String NBT_COMPARE = "Compare"; @@ -71,8 +73,11 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I private boolean pickupItem = false; private ItemStack tool = createTool(); + private CoverManager coverManager; + public DestructorNetworkNode(World world, BlockPos pos) { super(world, pos); + this.coverManager = new CoverManager(this); } @Override @@ -250,6 +255,8 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I public void read(CompoundNBT tag) { super.read(tag); + if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover")); + StackUtils.readItems(upgrades, 1, tag); } @@ -262,6 +269,8 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I public CompoundNBT write(CompoundNBT tag) { super.write(tag); + tag.put("Cover", this.coverManager.writeToNbt()); + StackUtils.writeItems(upgrades, 1, tag); return tag; @@ -348,4 +357,9 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I public void setPickupItem(boolean pickupItem) { this.pickupItem = pickupItem; } + + @Override + public CoverManager getCoverManager() { + return coverManager; + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ExporterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ExporterNetworkNode.java index 381778e42..d19b7f4bc 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ExporterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ExporterNetworkNode.java @@ -249,7 +249,9 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy @Override public CompoundNBT write(CompoundNBT tag) { super.write(tag); + tag.put("Cover", this.coverManager.writeToNbt()); + StackUtils.writeItems(upgrades, 1, tag); return tag; } @@ -271,7 +273,9 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy @Override public void read(CompoundNBT tag) { super.read(tag); + if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover")); + StackUtils.readItems(upgrades, 1, tag); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ImporterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ImporterNetworkNode.java index 102e81b09..35841cd00 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ImporterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ImporterNetworkNode.java @@ -153,7 +153,9 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh @Override public void read(CompoundNBT tag) { super.read(tag); + if (tag.contains("Cover")) this.coverManager.readFromNbt(tag.getCompound("Cover")); + StackUtils.readItems(upgrades, 1, tag); } @@ -165,7 +167,9 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh @Override public CompoundNBT write(CompoundNBT tag) { super.write(tag); + tag.put("Cover", this.coverManager.writeToNbt()); + StackUtils.writeItems(upgrades, 1, tag); return tag; diff --git a/src/main/java/com/refinedmods/refinedstorage/block/ConstructorBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/ConstructorBlock.java index 6c00d8526..029c25788 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/ConstructorBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/ConstructorBlock.java @@ -52,13 +52,13 @@ public class ConstructorBlock extends CableBlock { @Override 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); shape = VoxelShapes.or(shape, getHeadShape(s)); - return ConstantsCable.addCoverVoxelShapes(shape, world, pos); - }); + return shape; + }), world, pos); } private VoxelShape getHeadShape(BlockState state) { diff --git a/src/main/java/com/refinedmods/refinedstorage/block/DestructorBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/DestructorBlock.java index 71c25d66e..39f1fee7a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/DestructorBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/DestructorBlock.java @@ -52,13 +52,13 @@ public class DestructorBlock extends CableBlock { @Override 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); shape = VoxelShapes.or(shape, getHeadShape(s)); - return ConstantsCable.addCoverVoxelShapes(shape, world, pos); - }); + return shape; + }), world, pos); } private VoxelShape getHeadShape(BlockState state) { diff --git a/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java b/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java index e8e912b8d..44d165f9a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java +++ b/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java @@ -97,8 +97,6 @@ public class ClientSetup { "block/security_manager/cutouts/right_") ))); forEachColorApply("wireless_transmitter", (name, color) -> bakedModelOverrideRegistry.add(name, (base, registry) -> new FullbrightBakedModel(base, true, getColoredModel(color, "block/wireless_transmitter/cutouts/")))); - bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "constructor"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/constructor/cutouts/connected"))); - bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "destructor"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/destructor/cutouts/connected"))); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel( new DiskDriveBakedModel( @@ -114,6 +112,8 @@ public class ClientSetup { 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, "constructor"), (base, registry) -> new BakedModelCableCover(new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/constructor/cutouts/connected")))); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "destructor"), (base, registry) -> new BakedModelCableCover(new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/destructor/cutouts/connected")))); 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)); diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/CableTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/CableTile.java index 1dc5c96c2..d84f97f38 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/CableTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/CableTile.java @@ -33,8 +33,7 @@ public class CableTile extends NetworkNodeTile { public static final TileDataParameter 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(() -> { - })); + (initial, p) -> Minecraft.getInstance().enqueue(() -> {})); static { TileDataManager.registerParameter(COVER_MANAGER); diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/ConstructorTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/ConstructorTile.java index c43bf1fc6..3c0cbc220 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/ConstructorTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/ConstructorTile.java @@ -2,12 +2,19 @@ package com.refinedmods.refinedstorage.tile; import com.refinedmods.refinedstorage.RSTiles; import com.refinedmods.refinedstorage.apiimpl.network.node.ConstructorNetworkNode; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.tile.config.IComparable; 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.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.world.World; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap; import javax.annotation.Nonnull; @@ -19,12 +26,22 @@ public class ConstructorTile extends NetworkNodeTile { t.getNode().markDirty(); }); + public static final TileDataParameter 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 ConstructorTile() { super(RSTiles.CONSTRUCTOR); dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(DROP); + dataManager.addWatchedParameter(COVER_MANAGER); } @Override @@ -32,4 +49,30 @@ public class ConstructorTile extends NetworkNodeTile { public ConstructorNetworkNode createNode(World world, BlockPos pos) { return new ConstructorNetworkNode(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); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/DestructorTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/DestructorTile.java index bee1ad2bf..5498d723a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/DestructorTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/DestructorTile.java @@ -2,13 +2,20 @@ package com.refinedmods.refinedstorage.tile; import com.refinedmods.refinedstorage.RSTiles; import com.refinedmods.refinedstorage.apiimpl.network.node.DestructorNetworkNode; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.tile.config.IComparable; import com.refinedmods.refinedstorage.tile.config.IType; 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.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.world.World; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap; import javax.annotation.Nonnull; @@ -21,6 +28,15 @@ public class DestructorTile extends NetworkNodeTile { t.getNode().markDirty(); }); + public static final TileDataParameter 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 DestructorTile() { super(RSTiles.DESTRUCTOR); @@ -35,4 +51,30 @@ public class DestructorTile extends NetworkNodeTile { public DestructorNetworkNode createNode(World world, BlockPos pos) { return new DestructorNetworkNode(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); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/ExporterTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/ExporterTile.java index 78c9a3630..a171bb13c 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/ExporterTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/ExporterTile.java @@ -23,8 +23,7 @@ public class ExporterTile extends NetworkNodeTile { public static final TileDataParameter 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(() -> { - })); + (initial, p) -> Minecraft.getInstance().enqueue(() -> {})); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter TYPE = IType.createParameter(); diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/ImporterTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/ImporterTile.java index 962b9749b..54e1b50a3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/ImporterTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/ImporterTile.java @@ -27,14 +27,12 @@ public class ImporterTile extends NetworkNodeTile { public static final TileDataParameter 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(() -> { - })); + (initial, p) -> Minecraft.getInstance().enqueue(() -> {})); static { TileDataManager.registerParameter(COVER_MANAGER); } - public ImporterTile() { super(RSTiles.IMPORTER); @@ -50,7 +48,6 @@ public class ImporterTile extends NetworkNodeTile { return new ImporterNetworkNode(world, pos); } - @Nonnull @Override public IModelData getModelData() { @@ -60,6 +57,7 @@ public class ImporterTile extends NetworkNodeTile { @Override public CompoundNBT writeUpdate(CompoundNBT tag) { super.writeUpdate(tag); + tag.put("Covers", this.getNode().getCoverManager().writeToNbt()); return tag;