Added cover support for constructor, destructor, reader, writer.

This commit is contained in:
raoulvdberge
2018-07-07 19:15:18 +02:00
parent 34b0735050
commit 999c02dbd0
16 changed files with 218 additions and 81 deletions

View File

@@ -16,7 +16,7 @@ public class NetworkNodeCable extends NetworkNode implements ICoverable {
private static final String NBT_COVERS = "Covers"; private static final String NBT_COVERS = "Covers";
private CoverManager coverManager = new CoverManager(this); private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.ALLOW_ALL);
public NetworkNodeCable(World world, BlockPos pos) { public NetworkNodeCable(World world, BlockPos pos) {
super(world, pos); super(world, pos);

View File

@@ -4,6 +4,7 @@ import com.mojang.authlib.GameProfile;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilter; import com.raoulvdberge.refinedstorage.container.slot.SlotFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
@@ -37,18 +38,23 @@ import net.minecraft.world.World;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.BlockSnapshot;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
public class NetworkNodeConstructor extends NetworkNode implements IComparable, IType { import javax.annotation.Nullable;
public class NetworkNodeConstructor extends NetworkNode implements IComparable, IType, ICoverable {
public static final String ID = "constructor"; public static final String ID = "constructor";
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_DROP = "Drop"; private static final String NBT_DROP = "Drop";
private static final String NBT_COVERS = "Covers";
private static final int BASE_SPEED = 20; private static final int BASE_SPEED = 20;
@@ -61,6 +67,8 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
private int type = IType.ITEMS; private int type = IType.ITEMS;
private boolean drop = false; private boolean drop = false;
private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.NONE_ON_FACE);
public NetworkNodeConstructor(World world, BlockPos pos) { public NetworkNodeConstructor(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@@ -276,6 +284,8 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
StackUtils.writeItems(upgrades, 1, tag); StackUtils.writeItems(upgrades, 1, tag);
tag.setTag(NBT_COVERS, coverManager.writeToNbt());
return tag; return tag;
} }
@@ -309,6 +319,10 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
drop = tag.getBoolean(NBT_DROP); drop = tag.getBoolean(NBT_DROP);
} }
if (tag.hasKey(NBT_COVERS)) {
coverManager.readFromNbt(tag.getTagList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
}
StackUtils.readItems(itemFilters, 0, tag); StackUtils.readItems(itemFilters, 0, tag);
StackUtils.readItems(fluidFilters, 2, tag); StackUtils.readItems(fluidFilters, 2, tag);
} }
@@ -327,7 +341,12 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
@Override @Override
public IItemHandler getDrops() { public IItemHandler getDrops() {
return upgrades; return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
}
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
} }
@Override @Override
@@ -351,4 +370,9 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
public IItemHandler getFilterInventory() { public IItemHandler getFilterInventory() {
return getType() == IType.ITEMS ? itemFilters : fluidFilters; return getType() == IType.ITEMS ? itemFilters : fluidFilters;
} }
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
@@ -25,6 +26,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityShulkerBox; import net.minecraft.tileentity.TileEntityShulkerBox;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -34,6 +36,7 @@ import net.minecraft.world.World;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
@@ -43,17 +46,20 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper;
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class NetworkNodeDestructor extends NetworkNode implements IComparable, IFilterable, IType { public class NetworkNodeDestructor extends NetworkNode implements IComparable, IFilterable, IType, ICoverable {
public static final String ID = "destructor"; public static final String ID = "destructor";
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode"; private static final String NBT_MODE = "Mode";
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_PICKUP = "Pickup"; private static final String NBT_PICKUP = "Pickup";
private static final String NBT_COVERS = "Covers";
private static final int BASE_SPEED = 20; private static final int BASE_SPEED = 20;
@@ -67,6 +73,8 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
private int type = IType.ITEMS; private int type = IType.ITEMS;
private boolean pickupItem = false; private boolean pickupItem = false;
private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.NONE_ON_FACE);
public NetworkNodeDestructor(World world, BlockPos pos) { public NetworkNodeDestructor(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@@ -211,6 +219,10 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
super.read(tag); super.read(tag);
StackUtils.readItems(upgrades, 1, tag); StackUtils.readItems(upgrades, 1, tag);
if (tag.hasKey(NBT_COVERS)) {
coverManager.readFromNbt(tag.getTagList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
}
} }
@Override @Override
@@ -224,6 +236,8 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
StackUtils.writeItems(upgrades, 1, tag); StackUtils.writeItems(upgrades, 1, tag);
tag.setTag(NBT_COVERS, coverManager.writeToNbt());
return tag; return tag;
} }
@@ -283,7 +297,7 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
@Override @Override
public IItemHandler getDrops() { public IItemHandler getDrops() {
return upgrades; return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
} }
@Override @Override
@@ -303,6 +317,11 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
return getType() == IType.ITEMS ? itemFilters : fluidFilters; return getType() == IType.ITEMS ? itemFilters : fluidFilters;
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
public boolean isPickupItem() { public boolean isPickupItem() {
return pickupItem; return pickupItem;
} }
@@ -310,4 +329,9 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
public void setPickupItem(boolean pickupItem) { public void setPickupItem(boolean pickupItem) {
this.pickupItem = pickupItem; this.pickupItem = pickupItem;
} }
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -16,6 +16,7 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
import com.raoulvdberge.refinedstorage.util.WorldUtils; import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
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.common.util.Constants; import net.minecraftforge.common.util.Constants;
@@ -26,6 +27,8 @@ import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nullable;
public class NetworkNodeExporter extends NetworkNode implements IComparable, IType, ICoverable { public class NetworkNodeExporter extends NetworkNode implements IComparable, IType, ICoverable {
public static final String ID = "exporter"; public static final String ID = "exporter";
@@ -41,7 +44,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
private int type = IType.ITEMS; private int type = IType.ITEMS;
private CoverManager coverManager = new CoverManager(this).setCanPlaceCoversOnFace(false); private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE);
private int filterSlot; private int filterSlot;
@@ -238,6 +241,11 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
return getType() == IType.ITEMS ? itemFilters : fluidFilters; return getType() == IType.ITEMS ? itemFilters : fluidFilters;
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
@Override @Override
public CoverManager getCoverManager() { public CoverManager getCoverManager() {
return coverManager; return coverManager;

View File

@@ -26,6 +26,7 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
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.common.util.Constants; import net.minecraftforge.common.util.Constants;
@@ -55,7 +56,7 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
private AccessType accessType = AccessType.INSERT_EXTRACT; private AccessType accessType = AccessType.INSERT_EXTRACT;
private int networkTicks; private int networkTicks;
private CoverManager coverManager = new CoverManager(this).setCanPlaceCoversOnFace(false); private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE);
private List<IStorageExternal<ItemStack>> itemStorages = new CopyOnWriteArrayList<>(); private List<IStorageExternal<ItemStack>> itemStorages = new CopyOnWriteArrayList<>();
private List<IStorageExternal<FluidStack>> fluidStorages = new CopyOnWriteArrayList<>(); private List<IStorageExternal<FluidStack>> fluidStorages = new CopyOnWriteArrayList<>();
@@ -352,6 +353,11 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
return fluidStorages; return fluidStorages;
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
@Nullable @Nullable
@Override @Override
public IItemHandler getDrops() { public IItemHandler getDrops() {

View File

@@ -20,6 +20,7 @@ import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
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.common.util.Constants; import net.minecraftforge.common.util.Constants;
@@ -29,6 +30,8 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nullable;
public class NetworkNodeImporter extends NetworkNode implements IComparable, IFilterable, IType, ICoverable { public class NetworkNodeImporter extends NetworkNode implements IComparable, IFilterable, IType, ICoverable {
public static final String ID = "importer"; public static final String ID = "importer";
@@ -46,7 +49,7 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi
private int mode = IFilterable.BLACKLIST; private int mode = IFilterable.BLACKLIST;
private int type = IType.ITEMS; private int type = IType.ITEMS;
private CoverManager coverManager = new CoverManager(this).setCanPlaceCoversOnFace(false); private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE);
private int currentSlot; private int currentSlot;
@@ -220,6 +223,11 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi
return new CombinedInvWrapper(upgrades, coverManager.getAsInventory()); return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
@Override @Override
public int getType() { public int getType() {
return world.isRemote ? TileImporter.TYPE.getValue() : type; return world.isRemote ? TileImporter.TYPE.getValue() : type;

View File

@@ -2,19 +2,27 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.raoulvdberge.refinedstorage.tile.TileReader; import com.raoulvdberge.refinedstorage.tile.TileReader;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
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.common.util.Constants;
public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReaderWriter { import javax.annotation.Nullable;
public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReaderWriter, ICoverable {
public static final String ID = "reader"; public static final String ID = "reader";
private static final String NBT_CHANNEL = "Channel"; private static final String NBT_CHANNEL = "Channel";
private static final String NBT_COVERS = "Covers";
private String channel = ""; private String channel = "";
private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE);
public NetworkNodeReader(World world, BlockPos pos) { public NetworkNodeReader(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@@ -66,6 +74,10 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
if (tag.hasKey(NBT_CHANNEL)) { if (tag.hasKey(NBT_CHANNEL)) {
channel = tag.getString(NBT_CHANNEL); channel = tag.getString(NBT_CHANNEL);
} }
if (tag.hasKey(NBT_COVERS)) {
coverManager.readFromNbt(tag.getTagList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
}
} }
@Override @Override
@@ -79,6 +91,18 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
tag.setString(NBT_CHANNEL, channel); tag.setString(NBT_CHANNEL, channel);
tag.setTag(NBT_COVERS, coverManager.writeToNbt());
return tag; return tag;
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -5,22 +5,30 @@ import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.raoulvdberge.refinedstorage.tile.TileWriter; import com.raoulvdberge.refinedstorage.tile.TileWriter;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
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.common.util.Constants;
public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReaderWriter { import javax.annotation.Nullable;
public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReaderWriter, ICoverable {
public static final String ID = "writer"; public static final String ID = "writer";
private static final String NBT_CHANNEL = "Channel"; private static final String NBT_CHANNEL = "Channel";
private static final String NBT_COVERS = "Covers";
private String channel = ""; private String channel = "";
private int redstoneStrength; private int redstoneStrength;
private int lastRedstoneStrength; private int lastRedstoneStrength;
private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE);
public NetworkNodeWriter(World world, BlockPos pos) { public NetworkNodeWriter(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@@ -98,6 +106,10 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
if (tag.hasKey(NBT_CHANNEL)) { if (tag.hasKey(NBT_CHANNEL)) {
channel = tag.getString(NBT_CHANNEL); channel = tag.getString(NBT_CHANNEL);
} }
if (tag.hasKey(NBT_COVERS)) {
coverManager.readFromNbt(tag.getTagList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
}
} }
@Override @Override
@@ -111,6 +123,18 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
tag.setString(NBT_CHANNEL, channel); tag.setString(NBT_CHANNEL, channel);
tag.setTag(NBT_COVERS, coverManager.writeToNbt());
return tag; return tag;
} }
@Override
public boolean canConduct(@Nullable EnumFacing direction) {
return coverManager.canConduct(direction);
}
@Override
public CoverManager getCoverManager() {
return coverManager;
}
} }

View File

@@ -25,16 +25,23 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class CoverManager { public class CoverManager {
public enum CoverPlacementMode {
ALLOW_ALL,
NONE_ON_FACE,
HOLLOW_ON_FACE
}
private static final String NBT_DIRECTION = "Direction"; private static final String NBT_DIRECTION = "Direction";
private static final String NBT_ITEM = "Item"; private static final String NBT_ITEM = "Item";
private static final String NBT_HOLLOW = "Hollow"; private static final String NBT_HOLLOW = "Hollow";
private Map<EnumFacing, Cover> covers = new HashMap<>(); private Map<EnumFacing, Cover> covers = new HashMap<>();
private NetworkNode node; private NetworkNode node;
private boolean canPlaceCoversOnFace = true; private CoverPlacementMode placementMode;
public CoverManager(NetworkNode node) { public CoverManager(NetworkNode node, CoverPlacementMode placementMode) {
this.node = node; this.node = node;
this.placementMode = placementMode;
} }
public boolean canConduct(EnumFacing direction) { public boolean canConduct(EnumFacing direction) {
@@ -66,8 +73,18 @@ public class CoverManager {
public boolean setCover(EnumFacing facing, Cover cover) { public boolean setCover(EnumFacing facing, Cover cover) {
if (isValidCover(cover.getStack()) && !hasCover(facing)) { if (isValidCover(cover.getStack()) && !hasCover(facing)) {
if (facing == node.getDirection() && !canPlaceCoversOnFace && !cover.isHollow()) { if (facing == node.getDirection()) {
return false; switch (placementMode) {
case ALLOW_ALL:
break;
case NONE_ON_FACE:
return false;
case HOLLOW_ON_FACE:
if (!cover.isHollow()) {
return false;
}
break;
}
} }
covers.put(facing, cover); covers.put(facing, cover);
@@ -183,10 +200,4 @@ public class CoverManager {
return null; return null;
} }
} }
public CoverManager setCanPlaceCoversOnFace(boolean canPlaceCoversOnFace) {
this.canPlaceCoversOnFace = canPlaceCoversOnFace;
return this;
}
} }

View File

@@ -13,16 +13,15 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class BlockConstructor extends BlockCable { public class BlockConstructor extends BlockCable {
public static final AxisAlignedBB HEAD_NORTH_AABB = RenderUtils.getBounds(0, 0, 0, 16, 16, 2); private static final AxisAlignedBB HEAD_NORTH_AABB = RenderUtils.getBounds(2, 2, 0, 14, 14, 2);
public static final AxisAlignedBB HEAD_EAST_AABB = RenderUtils.getBounds(14, 0, 0, 16, 16, 16); private static final AxisAlignedBB HEAD_EAST_AABB = RenderUtils.getBounds(14, 2, 2, 16, 14, 14);
public static final AxisAlignedBB HEAD_SOUTH_AABB = RenderUtils.getBounds(0, 0, 14, 16, 16, 16); private static final AxisAlignedBB HEAD_SOUTH_AABB = RenderUtils.getBounds(2, 2, 14, 14, 14, 16);
public static final AxisAlignedBB HEAD_WEST_AABB = RenderUtils.getBounds(0, 0, 0, 2, 16, 16); private static final AxisAlignedBB HEAD_WEST_AABB = RenderUtils.getBounds(0, 2, 2, 2, 14, 14);
public static final AxisAlignedBB HEAD_DOWN_AABB = RenderUtils.getBounds(0, 0, 0, 16, 2, 16); private static final AxisAlignedBB HEAD_DOWN_AABB = RenderUtils.getBounds(2, 0, 2, 14, 2, 14);
public static final AxisAlignedBB HEAD_UP_AABB = RenderUtils.getBounds(0, 14, 0, 16, 16, 16); private static final AxisAlignedBB HEAD_UP_AABB = RenderUtils.getBounds(2, 14, 2, 14, 16, 14);
public BlockConstructor() { public BlockConstructor() {
super("constructor"); super("constructor");
@@ -30,7 +29,7 @@ public class BlockConstructor extends BlockCable {
@Override @Override
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) { public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
List<AxisAlignedBB> boxes = new ArrayList<>(); List<AxisAlignedBB> boxes = super.getCollisionBoxes(tile, state);
switch (state.getValue(getDirection().getProperty())) { switch (state.getValue(getDirection().getProperty())) {
case NORTH: case NORTH:

View File

@@ -375,7 +375,14 @@ public class ProxyClient extends ProxyCommon {
if (model.getResourceDomain().equals(RS.ID)) { if (model.getResourceDomain().equals(RS.ID)) {
if (model.getResourcePath().equals("pattern")) { if (model.getResourcePath().equals("pattern")) {
e.getModelRegistry().putObject(model, new BakedModelPattern(e.getModelRegistry().getObject(model))); e.getModelRegistry().putObject(model, new BakedModelPattern(e.getModelRegistry().getObject(model)));
} else if (model.getResourcePath().equals("cable") || model.getResourcePath().equals("exporter") || model.getResourcePath().equals("importer") || model.getResourcePath().equals("external_storage")) { } else if (model.getResourcePath().equals("cable") ||
model.getResourcePath().equals("exporter") ||
model.getResourcePath().equals("importer") ||
model.getResourcePath().equals("external_storage") ||
model.getResourcePath().equals("constructor") ||
model.getResourcePath().equals("destructor") ||
model.getResourcePath().equals("reader") ||
model.getResourcePath().equals("writer")) {
e.getModelRegistry().putObject(model, new BakedModelCableCover(e.getModelRegistry().getObject(model))); e.getModelRegistry().putObject(model, new BakedModelCableCover(e.getModelRegistry().getObject(model)));
} }
} }

View File

@@ -43,18 +43,18 @@ public class BakedModelCableCover implements IBakedModel {
boolean hasEast = s.getValue(BlockCable.COVER_EAST) != null; boolean hasEast = s.getValue(BlockCable.COVER_EAST) != null;
boolean hasWest = s.getValue(BlockCable.COVER_WEST) != null; boolean hasWest = s.getValue(BlockCable.COVER_WEST) != null;
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, hasUp, hasDown, hasEast, hasWest, true);
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, hasUp, hasDown, hasEast, hasWest, true);
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, hasUp, hasDown, hasEast, hasWest, true);
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, hasUp, hasDown, hasEast, hasWest, true);
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, hasUp, hasDown, hasEast, hasWest, true);
addCoverOrHollow(quads, s.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, hasUp, hasDown, hasEast, hasWest); addCoverOrHollow(quads, s.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, hasUp, hasDown, hasEast, hasWest, true);
} }
return quads; return quads;
} }
protected static void addCoverOrHollow(List<BakedQuad> quads, @Nullable Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest) { protected static void addCoverOrHollow(List<BakedQuad> quads, @Nullable Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle) {
if (cover == null) { if (cover == null) {
return; return;
} }
@@ -62,11 +62,11 @@ public class BakedModelCableCover implements IBakedModel {
if (cover.isHollow()) { if (cover.isHollow()) {
addHollowCover(quads, cover, coverSide, side, rand, hasUp, hasDown, hasEast, hasWest); addHollowCover(quads, cover, coverSide, side, rand, hasUp, hasDown, hasEast, hasWest);
} else { } else {
addCover(quads, cover, coverSide, side, rand, hasUp, hasDown, hasEast, hasWest); addCover(quads, cover, coverSide, side, rand, hasUp, hasDown, hasEast, hasWest, handle);
} }
} }
private static void addCover(List<BakedQuad> quads, Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest) { private static void addCover(List<BakedQuad> quads, Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle) {
IBlockState coverState = CoverManager.getBlockState(cover.getStack()); IBlockState coverState = CoverManager.getBlockState(cover.getStack());
if (coverState == null) { if (coverState == null) {
@@ -159,7 +159,9 @@ public class BakedModelCableCover implements IBakedModel {
.bake() .bake()
); );
addHolder(quads, rotation); if (handle) {
addHandle(quads, rotation);
}
} }
private static void addHollowCover(List<BakedQuad> quads, Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest) { private static void addHollowCover(List<BakedQuad> quads, Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest) {
@@ -312,7 +314,7 @@ public class BakedModelCableCover implements IBakedModel {
); );
} }
private static void addHolder(List<BakedQuad> quads, ModelRotation rotation) { private static void addHandle(List<BakedQuad> quads, ModelRotation rotation) {
if (GREY_SPRITE == null) { if (GREY_SPRITE == null) {
GREY_SPRITE = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(RS.ID + ":blocks/generic_grey"); GREY_SPRITE = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(RS.ID + ":blocks/generic_grey");
} }

View File

@@ -71,7 +71,7 @@ public class BakedModelCover extends BakedModelCableCover {
public List<BakedQuad> load(CacheKey key) { public List<BakedQuad> load(CacheKey key) {
List<BakedQuad> quads = new ArrayList<>(); List<BakedQuad> quads = new ArrayList<>();
addCoverOrHollow(quads, new Cover(key.stack, key.hollow), EnumFacing.NORTH, key.side, 0, false, false, false, false); addCoverOrHollow(quads, new Cover(key.stack, key.hollow), EnumFacing.NORTH, key.side, 0, false, false, false, false, false);
return quads; return quads;
} }

View File

@@ -73,13 +73,13 @@
{ {
"name": "Line2", "name": "Line2",
"from": [ "from": [
0.0, 2.0,
0.0, 2.0,
0.0 0.0
], ],
"to": [ "to": [
16.0, 14.0,
16.0, 14.0,
2.0 2.0
], ],
"faces": { "faces": {
@@ -95,7 +95,7 @@
"east": { "east": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 14.0,
0.0, 0.0,
16.0, 16.0,
16.0 16.0
@@ -115,25 +115,25 @@
"uv": [ "uv": [
0.0, 0.0,
0.0, 0.0,
16.0, 2.0,
16.0 16.0
] ]
}, },
"up": { "up": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
2.0,
0.0, 0.0,
0.0, 14.0,
16.0, 2.0
16.0
] ]
}, },
"down": { "down": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 2.0,
0.0, 14.0,
16.0, 14.0,
16.0 16.0
] ]
} }

View File

@@ -73,13 +73,13 @@
{ {
"name": "Line2", "name": "Line2",
"from": [ "from": [
0.0, 2.0,
0.0, 2.0,
0.0 0.0
], ],
"to": [ "to": [
16.0, 14.0,
16.0, 14.0,
2.0 2.0
], ],
"faces": { "faces": {
@@ -95,7 +95,7 @@
"east": { "east": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 14.0,
0.0, 0.0,
16.0, 16.0,
16.0 16.0
@@ -115,25 +115,25 @@
"uv": [ "uv": [
0.0, 0.0,
0.0, 0.0,
16.0, 2.0,
16.0 16.0
] ]
}, },
"up": { "up": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
2.0,
0.0, 0.0,
0.0, 14.0,
16.0, 2.0
16.0
] ]
}, },
"down": { "down": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 2.0,
0.0, 14.0,
16.0, 14.0,
16.0 16.0
] ]
} }
@@ -142,13 +142,13 @@
{ {
"name": "Line3", "name": "Line3",
"from": [ "from": [
0.0, 2.0,
0.0, 2.0,
0.0 0.0
], ],
"to": [ "to": [
16.0, 14.0,
16.0, 14.0,
2.0 2.0
], ],
"faces": { "faces": {

View File

@@ -73,13 +73,13 @@
{ {
"name": "Line2", "name": "Line2",
"from": [ "from": [
0.0, 2.0,
0.0, 2.0,
0.0 0.0
], ],
"to": [ "to": [
16.0, 14.0,
16.0, 14.0,
2.0 2.0
], ],
"faces": { "faces": {
@@ -95,7 +95,7 @@
"east": { "east": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 14.0,
0.0, 0.0,
16.0, 16.0,
16.0 16.0
@@ -115,25 +115,25 @@
"uv": [ "uv": [
0.0, 0.0,
0.0, 0.0,
16.0, 2.0,
16.0 16.0
] ]
}, },
"up": { "up": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
2.0,
0.0, 0.0,
0.0, 14.0,
16.0, 2.0
16.0
] ]
}, },
"down": { "down": {
"texture": "#line", "texture": "#line",
"uv": [ "uv": [
0.0, 2.0,
0.0, 14.0,
16.0, 14.0,
16.0 16.0
] ]
} }