diff --git a/src/main/java/gregtech/api/pipenet/block/material/BlockMaterialPipe.java b/src/main/java/gregtech/api/pipenet/block/material/BlockMaterialPipe.java index 003fda2a5de..05d1ca26269 100644 --- a/src/main/java/gregtech/api/pipenet/block/material/BlockMaterialPipe.java +++ b/src/main/java/gregtech/api/pipenet/block/material/BlockMaterialPipe.java @@ -15,16 +15,19 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import com.google.common.base.Preconditions; import org.jetbrains.annotations.NotNull; -import java.util.Objects; +import java.util.*; public abstract class BlockMaterialPipe< PipeType extends Enum & IPipeType & IMaterialPipeType, NodeDataType, @@ -32,13 +35,32 @@ public abstract class BlockMaterialPipe< extends BlockPipe { protected final PipeType pipeType; + protected final Map enabledMaterials; private final MaterialRegistry registry; public BlockMaterialPipe(@NotNull PipeType pipeType, @NotNull MaterialRegistry registry) { this.pipeType = pipeType; + this.enabledMaterials = new TreeMap<>(); this.registry = registry; } + public boolean isValidPipeMaterial(Material material) { + return !getItemPipeType(getItem(material)).getOrePrefix().isIgnored(material); + } + + public void addPipeMaterial(Material material, NodeDataType pipeProperties) { + Preconditions.checkNotNull(material, "material was null"); + Preconditions.checkNotNull(pipeProperties, "the %s of material %s was null", getPipeTypeClass().getSimpleName(), + material); + Preconditions.checkArgument(material.getRegistry().getNameForObject(material) != null, + "material %s is not registered", material); + this.enabledMaterials.put(material, pipeProperties); + } + + public Collection getEnabledMaterials() { + return Collections.unmodifiableSet(enabledMaterials.keySet()); + } + @Override public NodeDataType createProperties(IPipeTile pipeTile) { PipeType pipeType = pipeTile.getPipeType(); @@ -80,7 +102,21 @@ public ItemStack getDropItem(IPipeTile pipeTile) { return getItem(material); } - protected abstract NodeDataType createProperties(PipeType pipeType, Material material); + protected NodeDataType createProperties(PipeType pipeType, Material material) { + return pipeType.modifyProperties(enabledMaterials.getOrDefault(material, getFallbackType())); + } + + @Override + protected NodeDataType getFallbackType() { + return enabledMaterials.values().iterator().next(); + } + + @Override + public void getSubBlocks(@NotNull CreativeTabs itemIn, @NotNull NonNullList items) { + for (Material material : enabledMaterials.keySet()) { + items.add(getItem(material)); + } + } public OrePrefix getPrefix() { return pipeType.getOrePrefix(); diff --git a/src/main/java/gregtech/common/CommonProxy.java b/src/main/java/gregtech/common/CommonProxy.java index eb98d025ede..1f50f0232df 100644 --- a/src/main/java/gregtech/common/CommonProxy.java +++ b/src/main/java/gregtech/common/CommonProxy.java @@ -104,21 +104,21 @@ public static void registerBlocks(RegistryEvent.Register event) { if (material.hasProperty(PropertyKey.WIRE)) { for (BlockCable cable : CABLES.get(materialRegistry.getModid())) { - if (!cable.getItemPipeType(null).isCable() || - !material.getProperty(PropertyKey.WIRE).isSuperconductor()) - cable.addCableMaterial(material, material.getProperty(PropertyKey.WIRE)); + if (cable.isValidPipeMaterial(material)) { + cable.addPipeMaterial(material, material.getProperty(PropertyKey.WIRE)); + } } } if (material.hasProperty(PropertyKey.FLUID_PIPE)) { for (BlockFluidPipe pipe : FLUID_PIPES.get(materialRegistry.getModid())) { - if (!pipe.getItemPipeType(pipe.getItem(material)).getOrePrefix().isIgnored(material)) { + if (pipe.isValidPipeMaterial(material)) { pipe.addPipeMaterial(material, material.getProperty(PropertyKey.FLUID_PIPE)); } } } if (material.hasProperty(PropertyKey.ITEM_PIPE)) { for (BlockItemPipe pipe : ITEM_PIPES.get(materialRegistry.getModid())) { - if (!pipe.getItemPipeType(pipe.getItem(material)).getOrePrefix().isIgnored(material)) { + if (pipe.isValidPipeMaterial(material)) { pipe.addPipeMaterial(material, material.getProperty(PropertyKey.ITEM_PIPE)); } } diff --git a/src/main/java/gregtech/common/pipelike/cable/BlockCable.java b/src/main/java/gregtech/common/pipelike/cable/BlockCable.java index 98be62d35b1..f395a9ceedf 100644 --- a/src/main/java/gregtech/common/pipelike/cable/BlockCable.java +++ b/src/main/java/gregtech/common/pipelike/cable/BlockCable.java @@ -8,6 +8,7 @@ import gregtech.api.pipenet.tile.IPipeTile; import gregtech.api.pipenet.tile.TileEntityPipeBase; import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.properties.PropertyKey; import gregtech.api.unification.material.properties.WireProperties; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.api.util.GTUtility; @@ -22,7 +23,6 @@ import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -31,45 +31,28 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import com.google.common.base.Preconditions; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.TreeMap; - public class BlockCable extends BlockMaterialPipe implements ITileEntityProvider { - private final Map enabledMaterials = new TreeMap<>(); - public BlockCable(Insulation cableType, MaterialRegistry registry) { super(cableType, registry); setCreativeTab(GTCreativeTabs.TAB_GREGTECH_CABLES); setHarvestLevel(ToolClasses.WIRE_CUTTER, 1); } - public void addCableMaterial(Material material, WireProperties wireProperties) { - Preconditions.checkNotNull(material, "material was null"); - Preconditions.checkNotNull(wireProperties, "material %s wireProperties was null", material); - Preconditions.checkArgument(material.getRegistry().getNameForObject(material) != null, - "material %s is not registered", material); - if (!pipeType.orePrefix.isIgnored(material)) { - this.enabledMaterials.put(material, wireProperties); - } - } - - public Collection getEnabledMaterials() { - return Collections.unmodifiableSet(enabledMaterials.keySet()); + @Override + public boolean isValidPipeMaterial(Material material) { + return super.isValidPipeMaterial(material) && !(getItemPipeType(null).isCable() && + material.getProperty(PropertyKey.WIRE).isSuperconductor()); } @Override @@ -77,11 +60,6 @@ public Class getPipeTypeClass() { return Insulation.class; } - @Override - protected WireProperties createProperties(Insulation insulation, Material material) { - return insulation.modifyProperties(enabledMaterials.getOrDefault(material, getFallbackType())); - } - @SideOnly(Side.CLIENT) @NotNull @Override @@ -89,23 +67,11 @@ public PipeRenderer getPipeRenderer() { return CableRenderer.INSTANCE; } - @Override - protected WireProperties getFallbackType() { - return enabledMaterials.values().iterator().next(); - } - @Override public WorldENet getWorldPipeNet(World world) { return WorldENet.getWorldENet(world); } - @Override - public void getSubBlocks(@NotNull CreativeTabs itemIn, @NotNull NonNullList items) { - for (Material material : enabledMaterials.keySet()) { - items.add(getItem(material)); - } - } - @Override protected boolean isPipeTool(@NotNull ItemStack stack) { return ToolHelper.isTool(stack, ToolClasses.WIRE_CUTTER); diff --git a/src/main/java/gregtech/common/pipelike/fluidpipe/BlockFluidPipe.java b/src/main/java/gregtech/common/pipelike/fluidpipe/BlockFluidPipe.java index d94dc304bdf..2063119fe68 100644 --- a/src/main/java/gregtech/common/pipelike/fluidpipe/BlockFluidPipe.java +++ b/src/main/java/gregtech/common/pipelike/fluidpipe/BlockFluidPipe.java @@ -4,7 +4,6 @@ import gregtech.api.pipenet.block.material.BlockMaterialPipe; import gregtech.api.pipenet.tile.IPipeTile; import gregtech.api.pipenet.tile.TileEntityPipeBase; -import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.FluidPipeProperties; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.api.util.EntityDamageUtil; @@ -17,7 +16,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -25,7 +23,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidTank; @@ -33,37 +30,17 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import com.google.common.base.Preconditions; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -import java.util.Collection; -import java.util.Collections; -import java.util.SortedMap; -import java.util.TreeMap; - public class BlockFluidPipe extends BlockMaterialPipe { - private final SortedMap enabledMaterials = new TreeMap<>(); - public BlockFluidPipe(FluidPipeType pipeType, MaterialRegistry registry) { super(pipeType, registry); setCreativeTab(GTCreativeTabs.TAB_GREGTECH_PIPES); setHarvestLevel(ToolClasses.WRENCH, 1); } - public void addPipeMaterial(Material material, FluidPipeProperties fluidPipeProperties) { - Preconditions.checkNotNull(material, "material"); - Preconditions.checkNotNull(fluidPipeProperties, "material %s fluidPipeProperties was null", material); - Preconditions.checkArgument(material.getRegistry().getNameForObject(material) != null, - "material %s is not registered", material); - this.enabledMaterials.put(material, fluidPipeProperties); - } - - public Collection getEnabledMaterials() { - return Collections.unmodifiableSet(enabledMaterials.keySet()); - } - @Override public Class getPipeTypeClass() { return FluidPipeType.class; @@ -74,11 +51,6 @@ public WorldFluidPipeNet getWorldPipeNet(World world) { return WorldFluidPipeNet.getWorldPipeNet(world); } - @Override - protected FluidPipeProperties createProperties(FluidPipeType fluidPipeType, Material material) { - return fluidPipeType.modifyProperties(enabledMaterials.getOrDefault(material, getFallbackType())); - } - @SideOnly(Side.CLIENT) @NotNull @Override @@ -86,18 +58,6 @@ public PipeRenderer getPipeRenderer() { return FluidPipeRenderer.INSTANCE; } - @Override - protected FluidPipeProperties getFallbackType() { - return enabledMaterials.values().iterator().next(); - } - - @Override - public void getSubBlocks(@NotNull CreativeTabs itemIn, @NotNull NonNullList items) { - for (Material material : enabledMaterials.keySet()) { - items.add(getItem(material)); - } - } - @Override public void breakBlock(@NotNull World worldIn, @NotNull BlockPos pos, @NotNull IBlockState state) { super.breakBlock(worldIn, pos, state); diff --git a/src/main/java/gregtech/common/pipelike/itempipe/BlockItemPipe.java b/src/main/java/gregtech/common/pipelike/itempipe/BlockItemPipe.java index 7f6c79f9caa..eeadaa4ed16 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/BlockItemPipe.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/BlockItemPipe.java @@ -4,7 +4,6 @@ import gregtech.api.pipenet.block.material.BlockMaterialPipe; import gregtech.api.pipenet.tile.IPipeTile; import gregtech.api.pipenet.tile.TileEntityPipeBase; -import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.ItemPipeProperties; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.client.renderer.pipe.ItemPipeRenderer; @@ -16,46 +15,28 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; -import com.google.common.base.Preconditions; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - public class BlockItemPipe extends BlockMaterialPipe { - private final Map enabledMaterials = new HashMap<>(); - public BlockItemPipe(ItemPipeType itemPipeType, MaterialRegistry registry) { super(itemPipeType, registry); setCreativeTab(GTCreativeTabs.TAB_GREGTECH_PIPES); setHarvestLevel(ToolClasses.WRENCH, 1); } - public void addPipeMaterial(Material material, ItemPipeProperties properties) { - Preconditions.checkNotNull(material, "material"); - Preconditions.checkNotNull(properties, "material %s itemPipeProperties was null", material); - Preconditions.checkArgument(material.getRegistry().getNameForObject(material) != null, - "material %s is not registered", material); - this.enabledMaterials.put(material, properties); - } - @Override public TileEntityPipeBase createNewTileEntity(boolean supportsTicking) { return supportsTicking ? new TileEntityItemPipeTickable() : new TileEntityItemPipe(); @@ -66,11 +47,6 @@ public Class getPipeTypeClass() { return ItemPipeType.class; } - @Override - protected ItemPipeProperties getFallbackType() { - return enabledMaterials.values().iterator().next(); - } - @Override public WorldItemPipeNet getWorldPipeNet(World world) { return WorldItemPipeNet.getWorldPipeNet(world); @@ -82,11 +58,6 @@ protected Pair getParticleTexture(World world, Bloc return ItemPipeRenderer.INSTANCE.getParticleTexture((TileEntityItemPipe) world.getTileEntity(blockPos)); } - @Override - protected ItemPipeProperties createProperties(ItemPipeType itemPipeType, Material material) { - return itemPipeType.modifyProperties(enabledMaterials.getOrDefault(material, getFallbackType())); - } - @SideOnly(Side.CLIENT) @NotNull @Override @@ -94,17 +65,6 @@ public PipeRenderer getPipeRenderer() { return ItemPipeRenderer.INSTANCE; } - public Collection getEnabledMaterials() { - return Collections.unmodifiableSet(enabledMaterials.keySet()); - } - - @Override - public void getSubBlocks(@NotNull CreativeTabs itemIn, @NotNull NonNullList items) { - for (Material material : enabledMaterials.keySet()) { - items.add(getItem(material)); - } - } - @Override public boolean canPipesConnect(IPipeTile selfTile, EnumFacing side, IPipeTile sideTile) {