diff --git a/.gitignore b/.gitignore index 2c770e0..a5b9343 100755 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,22 @@ -# eclipse -bin -*.launch -.settings -.metadata -.classpath -.project - -# idea -out -*.ipr -*.iws -*.iml -.idea - -# gradle -build -.gradle - -# other -eclipse -run +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run diff --git a/build.gradle b/build.gradle index 26b982b..9c51485 100755 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ compileJava { } minecraft { - version = "1.12.2-14.23.4.2756" + version = "1.12.2-14.23.5.2847" runDir = "run" replace '${version}', project.version @@ -34,7 +34,7 @@ minecraft { // stable_# stables are built at the discretion of the MCP team. // Use non-default mappings at your own risk. they may not always work. // simply re-run your setup task after changing the mappings to update your workspace. - mappings = "snapshot_20171003" + mappings = "stable_39" // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. } repositories { @@ -42,10 +42,19 @@ repositories { name 'jared maven' url 'http://blamejared.com/maven' } + maven { + name 'Progwml6 maven' + url 'https://dvs1.progwml6.com/files/maven/' + } + maven { + name 'JEI' + url 'https://modmaven.k-4u.nl' + } } dependencies { deobfCompile "blusunrize:ImmersiveEngineering:0.12-+:deobf" + runtime "mezz.jei:jei_1.12.2:4.15.0.297" } processResources { diff --git a/src/main/java/antibluequirk/alternatingflux/AlternatingFlux.java b/src/main/java/antibluequirk/alternatingflux/AlternatingFlux.java index b21be7b..77d1dcd 100755 --- a/src/main/java/antibluequirk/alternatingflux/AlternatingFlux.java +++ b/src/main/java/antibluequirk/alternatingflux/AlternatingFlux.java @@ -1,22 +1,14 @@ package antibluequirk.alternatingflux; -import java.util.ArrayList; -import java.util.List; - import org.apache.logging.log4j.Logger; import antibluequirk.alternatingflux.block.BlockConnector; -import antibluequirk.alternatingflux.block.TileEntityRelayAF; -import antibluequirk.alternatingflux.block.TileEntityTransformerAF; -import antibluequirk.alternatingflux.item.ItemAFBase; -import antibluequirk.alternatingflux.item.ItemMaterial; import antibluequirk.alternatingflux.item.ItemWireCoil; -import antibluequirk.alternatingflux.wire.AFWireType; +import blusunrize.immersiveengineering.ImmersiveEngineering; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; @@ -24,90 +16,72 @@ import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.*; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistry; @Mod(modid = AlternatingFlux.MODID, version = AlternatingFlux.VERSION, dependencies = "required-after:immersiveengineering@[0.12,)", acceptedMinecraftVersions = "[1.12.2]") @Mod.EventBusSubscriber public class AlternatingFlux { - public static final String MODID = "alternatingflux"; - public static final String VERSION = "${version}"; - public static final String MODNAME = "Alternating Flux"; - + public static final String MODID = "alternatingflux"; + public static final String VERSION = "${version}"; + public static final String MODNAME = "Alternating Flux"; + public static Logger logger; - + @Mod.Instance(MODID) - public static AlternatingFlux instance = new AlternatingFlux(); - public static CreativeTabs creativeTab = new CreativeTabs(MODID) { - @Override - public ItemStack getTabIconItem() { - return new ItemStack(AlternatingFlux.item_coil, 1, 0); - } - }; - - public static final List blocks = new ArrayList<>(); - public static final List items = new ArrayList<>(); - - public static BlockConnector block_conn = null; - - public static ItemAFBase item_conn = null; - public static ItemWireCoil item_coil = null; - public static ItemMaterial item_material = null; + public static AlternatingFlux instance = new AlternatingFlux(); + public static CreativeTabs creativeTab; + + public static Item item_conn, item_coil, item_wire; + public static BlockConnector block_conn; public static ResourceLocation TEX_PASSTHROUGH_AF = new ResourceLocation(AlternatingFlux.MODID, "blocks/passthrough_af"); + @SidedProxy(clientSide = "antibluequirk.alternatingflux.client.ClientProxy", serverSide = "antibluequirk.alternatingflux.CommonProxy") public static CommonProxy proxy; - + @EventHandler - public void preInit(FMLPreInitializationEvent e) { - logger = e.getModLog(); - Config.preInit(e); - - AFWireType.init(); - proxy.preInit(); - - GameRegistry.registerTileEntity(TileEntityRelayAF.class, MODID + ":af_relay"); - GameRegistry.registerTileEntity(TileEntityTransformerAF.class, MODID + ":af_transformer"); + public void preInit(FMLPreInitializationEvent event) { + logger = event.getModLog(); + + // Initialize the creative tab + if(AlternatingFluxConfig.mergeTab) AlternatingFlux.creativeTab = ImmersiveEngineering.creativeTab; + else + { + AlternatingFlux.creativeTab = new CreativeTabs(MODID) { + @Override + public ItemStack createIcon() + { + return new ItemStack(AlternatingFlux.item_coil, 1, 0); + } + }; + } + + item_wire = new Item().setRegistryName(new ResourceLocation(AlternatingFlux.MODID, "wire_constantan")).setTranslationKey("wire_constantan").setCreativeTab(creativeTab); + block_conn = new BlockConnector(); + item_coil = new ItemWireCoil(); + + proxy.preInit(); } - - private static ResourceLocation createRegistryName(String unlocalized) - { - unlocalized = unlocalized.substring(unlocalized.indexOf(MODID)); - unlocalized = unlocalized.replaceFirst("\\.", ":"); - return new ResourceLocation(unlocalized); + + @EventHandler + public void init(FMLInitializationEvent event) { + proxy.init(); + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) { + proxy.postInit(); } @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { - block_conn = new BlockConnector(); - - for (Block block : blocks) - event.getRegistry().register(block.setRegistryName(createRegistryName(block.getUnlocalizedName()))); + event.getRegistry().register(block_conn); } - + @SubscribeEvent public static void registerItems(RegistryEvent.Register event) { - //item_conn = block_conn.createItemBlock(); - item_coil = new ItemWireCoil(); - item_material = new ItemMaterial(); - - for (Item item : items) - event.getRegistry().register(item.setRegistryName(createRegistryName(item.getUnlocalizedName()))); - - OreDictionary.registerOre("wireConstantan", new ItemStack(item_material, 1, 0)); - } - - @SubscribeEvent - public static void registerRecipes(RegistryEvent.Register event) { - //Recipes.addRecipes(event.getRegistry()); - } - - @EventHandler - public void init(FMLInitializationEvent e) { - } - - @EventHandler - public void postInit(FMLPostInitializationEvent e) { - proxy.postInit(); + IForgeRegistry reg = event.getRegistry(); + reg.register(AlternatingFlux.block_conn.getItemBlock()); + reg.registerAll(item_coil, item_wire); } } \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/AlternatingFluxConfig.java b/src/main/java/antibluequirk/alternatingflux/AlternatingFluxConfig.java new file mode 100755 index 0000000..b016872 --- /dev/null +++ b/src/main/java/antibluequirk/alternatingflux/AlternatingFluxConfig.java @@ -0,0 +1,31 @@ +package antibluequirk.alternatingflux; + +import net.minecraftforge.common.config.Config; + +@Config(modid = AlternatingFlux.MODID, name = AlternatingFlux.MODID, category = "general") +public class AlternatingFluxConfig { + @Config.Comment({"The transfer rates for the wires."}) + @Config.LangKey("config.alternatingflux.wireTransferRate.name") + public static int wireTransferRate = 131072; + + @Config.Comment({"True to disable creation of Alternating Flux creative tab. The items will be available under Immersive Engineering tab"}) + @Config.LangKey("config.alternatingflux.mergeTab.name") + @Config.RequiresMcRestart + public static boolean mergeTab = false; + + @Config.Comment({ + "The percentage of power lost every X blocks of distance for a wire network. (X is equal to the maximum wire length.)", + "The default value of 0.005 for AF is approximately equivalent to 10.67-14.93% over 1024 blocks, depending on the capacity penalty.", + "If you'd like to halve that penalty to 5.33-7.47%, set this value to 0.0025." + }) + @Config.LangKey("config.alternatingflux.wireLossRatio.name") + public static double wireLossRatio = 0.005; + + @Config.Comment({"The RGB values for the color of the wire."}) + @Config.LangKey("config.alternatingflux.wireColouration.name") + public static int wireColouration = 0xf6866c; + + @Config.Comment({"The maximum length of a single wire. ", "The loss penalty is applied for each of these lengths, so increasing this value increases the efficiency of the wire."}) + @Config.LangKey("config.alternatingflux.wireLength.name") + public static int wireLength = 48; +} \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/CommonProxy.java b/src/main/java/antibluequirk/alternatingflux/CommonProxy.java index 77027fb..d4cbc90 100755 --- a/src/main/java/antibluequirk/alternatingflux/CommonProxy.java +++ b/src/main/java/antibluequirk/alternatingflux/CommonProxy.java @@ -1,9 +1,24 @@ package antibluequirk.alternatingflux; +import antibluequirk.alternatingflux.block.TileEntityRelayAF; +import antibluequirk.alternatingflux.block.TileEntityTransformerAF; +import antibluequirk.alternatingflux.wire.AFWireType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.OreDictionary; + public class CommonProxy { public void preInit() { + GameRegistry.registerTileEntity(TileEntityRelayAF.class, new ResourceLocation(AlternatingFlux.MODID, "af_relay")); + GameRegistry.registerTileEntity(TileEntityTransformerAF.class, new ResourceLocation(AlternatingFlux.MODID, "af_af_transformer")); + } + + public void init() { + AFWireType.init(); } public void postInit() { + OreDictionary.registerOre("wireConstantan", new ItemStack(AlternatingFlux.item_wire, 1, 0)); } } \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/Config.java b/src/main/java/antibluequirk/alternatingflux/Config.java deleted file mode 100755 index 2e1fc59..0000000 --- a/src/main/java/antibluequirk/alternatingflux/Config.java +++ /dev/null @@ -1,60 +0,0 @@ -package antibluequirk.alternatingflux; - -import antibluequirk.alternatingflux.wire.AFWireType; -import blusunrize.immersiveengineering.common.Config.Mapped; -import net.minecraftforge.common.config.Config.Comment; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; - -public class Config { - - @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_int") - public static int alternatingflux_afTransferRate; - - @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_double") - public static double alternatingflux_afkmLossMin; - @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_double") - public static double alternatingflux_afkmLossMax; - - @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_int") - public static int alternatingflux_afMaxLength; - - - @net.minecraftforge.common.config.Config(modid = AlternatingFlux.MODID) - public static class AFConfig { - @Comment({ "The transfer rates for the wires.", "Order: AF" }) - public static int[] wireTransferRate = new int[] { 131072 }; - - @Comment({ "The percentage of power lost every X blocks of distance for a wire network. (X is equal to the maximum wire length.)", - "The default value of 0.005 for AF is approximately equivalent to 10.67-14.93% over 1024 blocks, depending on the capacity penalty.", - "If you'd like to halve that penalty to 5.33-7.47%, set this value to 0.0025.", - "Order: AF" }) - public static double[] wireLossRatio = new double[] { 0.005 }; - - @Comment({ "The RGB color of the wires.", "Order: AF" }) - public static int[] wireColouration = new int[] { 0xf6866c }; - - @Comment({ "The maximum length of a single wire. The loss penalty is applied for each of these lengths, so increasing this value increases the efficiency of the wire.", "Order: AF" }) - public static int[] wireLength = { 48 }; - - } - - public static void preInit(FMLPreInitializationEvent event) { - refresh(); - } - - public static void refresh() { - AFWireType.wire_rates = AFConfig.wireTransferRate; - AFWireType.wire_lossratios = AFConfig.wireLossRatio; - AFWireType.wire_colors = AFConfig.wireColouration; - AFWireType.wire_length = AFConfig.wireLength; - - alternatingflux_afTransferRate = AFConfig.wireTransferRate[0]; - alternatingflux_afkmLossMin = ((1024/AFConfig.wireLength[0])*AFConfig.wireLossRatio[0]*100); - alternatingflux_afkmLossMax = alternatingflux_afkmLossMin*1.4; - //Crude rounding, because we can't control the formatting. - alternatingflux_afkmLossMin = Math.round(alternatingflux_afkmLossMin * 10.0) / 10.0; - alternatingflux_afkmLossMax = Math.round(alternatingflux_afkmLossMax * 10.0) / 10.0; - alternatingflux_afMaxLength = AFConfig.wireLength[0]; - blusunrize.immersiveengineering.common.Config.validateAndMapValues(Config.class); - } -} \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/ManualConstants.java b/src/main/java/antibluequirk/alternatingflux/ManualConstants.java new file mode 100644 index 0000000..99f2828 --- /dev/null +++ b/src/main/java/antibluequirk/alternatingflux/ManualConstants.java @@ -0,0 +1,47 @@ +package antibluequirk.alternatingflux; + +import blusunrize.immersiveengineering.common.Config.Mapped; +import net.minecraftforge.common.config.ConfigManager; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@EventBusSubscriber +public class ManualConstants { + + @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_int") + public static int alternatingflux_afTransferRate; + + @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_double") + public static double alternatingflux_afkmLossMin; + + @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_double") + public static double alternatingflux_afkmLossMax; + + @Mapped(mapClass = blusunrize.immersiveengineering.common.Config.class, mapName = "manual_int") + public static int alternatingflux_afMaxLength; + + @SubscribeEvent + public static void configChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) + { + if(event.getModID().equals(AlternatingFlux.MODID)) + { + ConfigManager.sync(AlternatingFlux.MODID, net.minecraftforge.common.config.Config.Type.INSTANCE); + ManualConstants.refresh(); + } + } + + public static void refresh() + { + alternatingflux_afTransferRate = AlternatingFluxConfig.wireTransferRate; + alternatingflux_afkmLossMin = ((1024/AlternatingFluxConfig.wireLength)*AlternatingFluxConfig.wireLossRatio*100); + alternatingflux_afkmLossMax = alternatingflux_afkmLossMin*1.4; + // Crude rounding, because we can't control the formatting. + alternatingflux_afkmLossMin = Math.round(alternatingflux_afkmLossMin * 10.0) / 10.0; + alternatingflux_afkmLossMax = Math.round(alternatingflux_afkmLossMax * 10.0) / 10.0; + alternatingflux_afMaxLength = AlternatingFluxConfig.wireLength; + + blusunrize.immersiveengineering.common.Config.validateAndMapValues(ManualConstants.class); + } + +} diff --git a/src/main/java/antibluequirk/alternatingflux/block/BlockAFBase.java b/src/main/java/antibluequirk/alternatingflux/block/BlockAFBase.java deleted file mode 100755 index 1dae390..0000000 --- a/src/main/java/antibluequirk/alternatingflux/block/BlockAFBase.java +++ /dev/null @@ -1,46 +0,0 @@ -package antibluequirk.alternatingflux.block; - -import antibluequirk.alternatingflux.AlternatingFlux; -import blusunrize.immersiveengineering.common.IEContent; -import blusunrize.immersiveengineering.common.blocks.BlockIEBase; -import blusunrize.immersiveengineering.common.blocks.ItemBlockIEBase; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.item.Item; - -public class BlockAFBase & BlockIEBase.IBlockEnum> extends BlockIEBase { - public BlockAFBase(String name, Material material, PropertyEnum mainProperty, Class itemBlock, Object... additionalProperties) - { - super(name, material, mainProperty, itemBlock, additionalProperties); - fixupBlock(this, itemBlock); - } - - @Override - public String createRegistryName() - { - return AlternatingFlux.MODID+":"+name; - } - - //This function allows us to use BlockIEBase class, by fixing things up so they come from our mod. - //It should be called right after the super call in any constructor of a class that derives from BlockIEBase - //This is kind of hacky, but allows us to avoid copying a lot of code. - @SuppressWarnings("rawtypes") - public static void fixupBlock(BlockIEBase block, Class itemBlock) { - //First, get the block out of IE's registries. - Block rBlock = IEContent.registeredIEBlocks.remove(IEContent.registeredIEBlocks.size()-1); - if (rBlock != block) throw new IllegalStateException("fixupBlock was not called at the appropriate time, removed block did not match"); - - Item rItem = IEContent.registeredIEItems.remove(IEContent.registeredIEItems.size()-1); - if (rItem.getClass() != itemBlock) throw new IllegalStateException("fixupBlock was not called at the appropriate time"); - - //Now, reconfigure the block to match our mod. - block.setCreativeTab(AlternatingFlux.creativeTab); - - //And add it to our registries. - AlternatingFlux.blocks.add(block); - try{ - AlternatingFlux.items.add(itemBlock.getConstructor(Block.class).newInstance(block)); - }catch(Exception e){e.printStackTrace();} - } -} diff --git a/src/main/java/antibluequirk/alternatingflux/block/BlockAFTileProvider.java b/src/main/java/antibluequirk/alternatingflux/block/BlockAFTileProvider.java deleted file mode 100755 index c9e2cb0..0000000 --- a/src/main/java/antibluequirk/alternatingflux/block/BlockAFTileProvider.java +++ /dev/null @@ -1,22 +0,0 @@ -package antibluequirk.alternatingflux.block; - -import antibluequirk.alternatingflux.AlternatingFlux; -import blusunrize.immersiveengineering.common.blocks.BlockIEBase; -import blusunrize.immersiveengineering.common.blocks.BlockIETileProvider; -import blusunrize.immersiveengineering.common.blocks.ItemBlockIEBase; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyEnum; - -abstract class BlockAFTileProvider & BlockIEBase.IBlockEnum> extends BlockIETileProvider -{ - public BlockAFTileProvider(String name, Material material, PropertyEnum mainProperty, Class itemBlock, Object... additionalProperties) { - super(name, material, mainProperty, itemBlock, additionalProperties); - BlockAFBase.fixupBlock(this, itemBlock); - } - - @Override - public String createRegistryName() - { - return AlternatingFlux.MODID+":"+name; - } -} diff --git a/src/main/java/antibluequirk/alternatingflux/block/BlockConnector.java b/src/main/java/antibluequirk/alternatingflux/block/BlockConnector.java index 5de18c1..9e5f40a 100755 --- a/src/main/java/antibluequirk/alternatingflux/block/BlockConnector.java +++ b/src/main/java/antibluequirk/alternatingflux/block/BlockConnector.java @@ -1,13 +1,12 @@ package antibluequirk.alternatingflux.block; -import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import antibluequirk.alternatingflux.AlternatingFlux; -import blusunrize.immersiveengineering.ImmersiveEngineering; import blusunrize.immersiveengineering.api.IEProperties; import blusunrize.immersiveengineering.api.energy.wires.TileEntityImmersiveConnectable; import blusunrize.immersiveengineering.client.models.IOBJModelCallback; -import blusunrize.immersiveengineering.common.blocks.BlockIETileProvider; import blusunrize.immersiveengineering.common.blocks.ItemBlockIEBase; import net.minecraft.block.Block; import net.minecraft.block.material.EnumPushReaction; @@ -21,26 +20,30 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.property.ExtendedBlockState; import net.minecraftforge.common.property.IExtendedBlockState; import net.minecraftforge.common.property.IUnlistedProperty; -public class BlockConnector extends BlockAFTileProvider +public class BlockConnector extends BlockUnregisteredIETileProvider { + public static final ResourceLocation id = new ResourceLocation(AlternatingFlux.MODID, "connector"); + public BlockConnector() { - super("connector", Material.IRON, PropertyEnum.create("type", BlockTypes_Connector.class), ItemBlockIEBase.class, IEProperties.FACING_ALL, - IEProperties.BOOLEANS[0], IEProperties.BOOLEANS[1], IEProperties.MULTIBLOCKSLAVE, IOBJModelCallback.PROPERTY); - setHardness(3.0F); - setResistance(15.0F); - lightOpacity = 0; - setMetaBlockLayer(BlockTypes_Connector.RELAY_AF.getMeta(), BlockRenderLayer.SOLID, BlockRenderLayer.TRANSLUCENT); - setAllNotNormalBlock(); - setMetaMobilityFlag(BlockTypes_Connector.TRANSFORMER_AF.getMeta(), EnumPushReaction.BLOCK); + super(BlockConnector.id, Material.IRON, PropertyEnum.create("type", BlockTypes_Connector.class), ItemBlockIEBase.class, IEProperties.FACING_ALL, IEProperties.BOOLEANS[0], IEProperties.BOOLEANS[1], IEProperties.MULTIBLOCKSLAVE, IOBJModelCallback.PROPERTY); + this.setHardness(3.0F); + this.setResistance(15.0F); + this.lightOpacity = 0; + this.setMetaBlockLayer(BlockTypes_Connector.RELAY_AF.getMeta(), BlockRenderLayer.SOLID, BlockRenderLayer.TRANSLUCENT); + this.setAllNotNormalBlock(); + this.setMetaMobilityFlag(BlockTypes_Connector.TRANSFORMER_AF.getMeta(), EnumPushReaction.BLOCK); + + this.setCreativeTab(AlternatingFlux.creativeTab); + this.setTranslationKey("connector"); } @Override @@ -48,22 +51,24 @@ public boolean useCustomStateMapper() { return true; } + @Override public String getCustomStateMapping(int meta, boolean itemBlock) { - if(meta==BlockTypes_Connector.TRANSFORMER_AF.getMeta()) - return "transformer_af"; - return null; + return meta == BlockTypes_Connector.TRANSFORMER_AF.getMeta() ? "transformer_af" : null; } + @Override protected BlockStateContainer createBlockState() { BlockStateContainer base = super.createBlockState(); - IUnlistedProperty[] unlisted = (base instanceof ExtendedBlockState) ? ((ExtendedBlockState) base).getUnlistedProperties().toArray(new IUnlistedProperty[0]) : new IUnlistedProperty[0]; - unlisted = Arrays.copyOf(unlisted, unlisted.length+1); - unlisted[unlisted.length-1] = IEProperties.CONNECTIONS; - return new ExtendedBlockState(this, base.getProperties().toArray(new IProperty[0]), unlisted); + Collection> list = new HashSet>(); + if(base instanceof ExtendedBlockState) + list.addAll(((ExtendedBlockState)base).getUnlistedProperties()); + list.add(IEProperties.CONNECTIONS); + return new ExtendedBlockState(this, base.getProperties().toArray(new IProperty[0]), list.toArray(new IUnlistedProperty[0])); } + @Override public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) { @@ -82,16 +87,14 @@ public IBlockState getExtendedState(IBlockState state, IBlockAccess world, Block @Override public boolean canIEBlockBePlaced(World world, BlockPos pos, IBlockState newState, EnumFacing side, float hitX, float hitY, float hitZ, EntityPlayer player, ItemStack stack) { - switch (BlockTypes_Connector.values()[stack.getItemDamage()]) + if(stack.getItemDamage() == BlockTypes_Connector.TRANSFORMER_AF.getMeta()) { - case TRANSFORMER_AF: - for (int hh = 1; hh <= 2; hh++) - { - BlockPos pos2 = pos.up(hh); - if (world.isOutsideBuildHeight(pos2) || !world.getBlockState(pos2).getBlock().isReplaceable(world, pos2)) - return false; - } - break; + for(int offset = 1; offset <= 2; offset++) + { + BlockPos current_block = pos.up(offset); + if(world.isOutsideBuildHeight(current_block) || !world.getBlockState(current_block).getBlock().isReplaceable(world, current_block)) + return false; + } } return true; } @@ -122,8 +125,9 @@ public TileEntity createBasicTE(World world, BlockTypes_Connector type) return new TileEntityRelayAF(); case TRANSFORMER_AF: return new TileEntityTransformerAF(); + default: + return null; } - return null; } @Override diff --git a/src/main/java/antibluequirk/alternatingflux/block/BlockUnregisteredIETileProvider.java b/src/main/java/antibluequirk/alternatingflux/block/BlockUnregisteredIETileProvider.java new file mode 100644 index 0000000..bc5df20 --- /dev/null +++ b/src/main/java/antibluequirk/alternatingflux/block/BlockUnregisteredIETileProvider.java @@ -0,0 +1,52 @@ +package antibluequirk.alternatingflux.block; + +import antibluequirk.alternatingflux.AlternatingFlux; +import blusunrize.immersiveengineering.common.IEContent; +import blusunrize.immersiveengineering.common.blocks.BlockIEBase; +import blusunrize.immersiveengineering.common.blocks.BlockIETileProvider; +import blusunrize.immersiveengineering.common.blocks.ItemBlockIEBase; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; + +public abstract class BlockUnregisteredIETileProvider & BlockIEBase.IBlockEnum> extends BlockIETileProvider { + private final ItemBlockIEBase itemblock; + + public BlockUnregisteredIETileProvider(ResourceLocation name, Material material, PropertyEnum mainProperty, Class itemBlock, Object... additionalProperties) + { + super(name.getPath(), material, mainProperty, itemBlock, additionalProperties); + + this.itemblock = this.pullItemBlock(itemBlock); + this.itemblock.setRegistryName(name); + this.unregisterBlock(); + + this.setRegistryName(name); + } + + public ItemBlockIEBase getItemBlock() + { + return this.itemblock; + } + + @Override + public String createRegistryName() + { + return AlternatingFlux.MODID + ":" + name; + } + + private final void unregisterBlock() + { + Block rBlock = IEContent.registeredIEBlocks.remove(IEContent.registeredIEBlocks.size() - 1); + if(this != rBlock) throw new IllegalStateException("fixupBlock was not called at the appropriate time, removed block did not match"); + } + + private final ItemBlockIEBase pullItemBlock(Class itemBlock) + { + Item rItem = IEContent.registeredIEItems.remove(IEContent.registeredIEItems.size() - 1); + if(rItem.getClass() != itemBlock) throw new IllegalStateException("fixupBlock was not called at the appropriate time"); + + return (ItemBlockIEBase)rItem; + } +} diff --git a/src/main/java/antibluequirk/alternatingflux/block/TileEntityRelayAF.java b/src/main/java/antibluequirk/alternatingflux/block/TileEntityRelayAF.java index ecede3d..1091d86 100755 --- a/src/main/java/antibluequirk/alternatingflux/block/TileEntityRelayAF.java +++ b/src/main/java/antibluequirk/alternatingflux/block/TileEntityRelayAF.java @@ -1,54 +1,37 @@ package antibluequirk.alternatingflux.block; -import java.util.HashMap; -import java.util.HashSet; import java.util.Set; import antibluequirk.alternatingflux.wire.AFWireType; -import blusunrize.immersiveengineering.api.ApiUtils; import blusunrize.immersiveengineering.api.TargetingInfo; -import blusunrize.immersiveengineering.api.IEEnums.SideConfig; -import blusunrize.immersiveengineering.api.energy.immersiveflux.FluxStorage; -import blusunrize.immersiveengineering.api.energy.wires.IImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.AbstractConnection; import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; import blusunrize.immersiveengineering.api.energy.wires.TileEntityImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.WireType; import blusunrize.immersiveengineering.client.models.IOBJModelCallback; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IBlockBounds; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; -import blusunrize.immersiveengineering.common.util.EnergyHelper; -import blusunrize.immersiveengineering.common.util.EnergyHelper.IEForgeEnergyWrapper; -import blusunrize.immersiveengineering.common.util.EnergyHelper.IIEInternalFluxHandler; -import blusunrize.immersiveengineering.common.util.Utils; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityRelayAF extends TileEntityImmersiveConnectable - implements ITickable, IDirectionalTile, IBlockBounds, IOBJModelCallback { - public EnumFacing facing = EnumFacing.DOWN; +public class TileEntityRelayAF extends TileEntityImmersiveConnectable implements ITickable, IDirectionalTile, IBlockBounds, IOBJModelCallback { + public EnumFacing facing = EnumFacing.DOWN; boolean firstTick = true; @Override public void update() { - if (!world.isRemote) { - - } else if (firstTick) { + if(world.isRemote && firstTick) { Set conns = ImmersiveNetHandler.INSTANCE.getConnections(world, pos); if (conns != null) for (Connection conn : conns) @@ -86,7 +69,7 @@ public boolean canHammerRotate(EnumFacing side, float hitX, float hitY, float hi @Override public boolean canConnectCable(WireType cableType, TargetingInfo target, Vec3i offset) { - if(cableType!=AFWireType.AF) + if(cableType!=AFWireType.instance) return false; return limitType==null || limitType==cableType; } @@ -121,7 +104,7 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) { @Override public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { super.readCustomNBT(nbt, descPacket); - facing = EnumFacing.getFront(nbt.getInteger("facing")); + facing = EnumFacing.byIndex(nbt.getInteger("facing")); } @@ -129,8 +112,8 @@ public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { public Vec3d getConnectionOffset(Connection con) { EnumFacing side = facing.getOpposite(); - double conRadius = con.cableType.getRenderDiameter()/2; - return new Vec3d(.5+side.getFrontOffsetX()*(.375-conRadius), .5+side.getFrontOffsetY()*(.375-conRadius), .5+side.getFrontOffsetZ()*(.375-conRadius)); + double conRadius = 0.375 - con.cableType.getRenderDiameter() / 2; + return new Vec3d(0.5 + side.getXOffset() * conRadius, 0.5 + side.getYOffset() * conRadius, 0.5 + side.getZOffset() * conRadius); } @SideOnly(Side.CLIENT) @@ -145,7 +128,7 @@ public AxisAlignedBB getRenderBoundingBox() { } int getRenderRadiusIncrease() { - return AFWireType.AF.getMaxLength(); + return AFWireType.instance.getMaxLength(); } @Override @@ -166,13 +149,14 @@ public float[] getBlockBounds() { return new float[] { 0, wMin, wMin, length, wMax, wMax }; case WEST: return new float[] { 1 - length, wMin, wMin, 1, wMax, wMax }; + default: + return new float[] { 0, 0, 0, 1, 1, 1 }; } - return new float[] { 0, 0, 0, 1, 1, 1 }; } @Override public boolean shouldRenderGroup(IBlockState object, String group) { - return MinecraftForgeClient.getRenderLayer()== BlockRenderLayer.TRANSLUCENT; + return MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.TRANSLUCENT; } } \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/block/TileEntityTransformerAF.java b/src/main/java/antibluequirk/alternatingflux/block/TileEntityTransformerAF.java index edc8d0f..06a503e 100755 --- a/src/main/java/antibluequirk/alternatingflux/block/TileEntityTransformerAF.java +++ b/src/main/java/antibluequirk/alternatingflux/block/TileEntityTransformerAF.java @@ -1,40 +1,8 @@ package antibluequirk.alternatingflux.block; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; - -import antibluequirk.alternatingflux.wire.AFWireType; -import blusunrize.immersiveengineering.api.ApiUtils; -import blusunrize.immersiveengineering.api.IEProperties; -import blusunrize.immersiveengineering.api.IEProperties.PropertyBoolInverted; -import blusunrize.immersiveengineering.api.TargetingInfo; -import blusunrize.immersiveengineering.api.energy.wires.IImmersiveConnectable; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; -import blusunrize.immersiveengineering.api.energy.wires.TileEntityImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.WireType; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IAdvancedSelectionBounds; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDualState; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IHasDummyBlocks; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IMirrorAble; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IUsesBooleanProperty; -import blusunrize.immersiveengineering.common.blocks.metal.TileEntityTransformer; import blusunrize.immersiveengineering.common.blocks.metal.TileEntityTransformerHV; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumFacing.Axis; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; public class TileEntityTransformerAF extends TileEntityTransformerHV { diff --git a/src/main/java/antibluequirk/alternatingflux/client/ClientProxy.java b/src/main/java/antibluequirk/alternatingflux/client/ClientProxy.java old mode 100755 new mode 100644 index ca68420..4b014e2 --- a/src/main/java/antibluequirk/alternatingflux/client/ClientProxy.java +++ b/src/main/java/antibluequirk/alternatingflux/client/ClientProxy.java @@ -4,23 +4,18 @@ import antibluequirk.alternatingflux.AlternatingFlux; import antibluequirk.alternatingflux.CommonProxy; -import antibluequirk.alternatingflux.Config; -import antibluequirk.alternatingflux.item.ItemAFBase; +import antibluequirk.alternatingflux.ManualConstants; import blusunrize.immersiveengineering.api.ManualHelper; import blusunrize.immersiveengineering.api.energy.wires.WireApi; import blusunrize.immersiveengineering.client.IECustomStateMapper; import blusunrize.immersiveengineering.client.models.obj.IEOBJLoader; -import blusunrize.immersiveengineering.client.models.smart.ConnLoader; -import blusunrize.immersiveengineering.common.blocks.BlockIEFluid; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IIEMetaBlock; import blusunrize.lib.manual.ManualInstance; import blusunrize.lib.manual.ManualPages; import net.minecraft.block.Block; import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelRegistryEvent; @@ -28,8 +23,6 @@ import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.obj.OBJLoader; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.config.ConfigManager; -import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class ClientProxy extends CommonProxy { @@ -40,15 +33,16 @@ public void preInit() { OBJLoader.INSTANCE.addDomain(AlternatingFlux.MODID); IEOBJLoader.instance.addDomain(AlternatingFlux.MODID); } + @Override public void postInit() { super.postInit(); + ManualConstants.refresh(); ManualInstance m = ManualHelper.getManual(); m.addEntry("alternatingflux", ManualHelper.CAT_ENERGY, new ManualPages.Text(m, "alternatingflux0"), - new ManualPages.Crafting(m, "alternatingfluxWire", new ItemStack(AlternatingFlux.item_material, 1, 0), - new ItemStack(AlternatingFlux.item_coil, 1, 0)), + new ManualPages.Crafting(m, "alternatingfluxWire", new ItemStack(AlternatingFlux.item_wire, 1, 0), new ItemStack(AlternatingFlux.item_coil, 1, 0)), new ManualPages.Text(m, "alternatingflux1"), new ManualPages.Crafting(m, "alternatingfluxRelay", new ItemStack(AlternatingFlux.block_conn, 1, 0)), new ManualPages.Crafting(m, "alternatingfluxTransformer", new ItemStack(AlternatingFlux.block_conn, 1, 1)), @@ -56,116 +50,63 @@ public void postInit() { new ManualPages.Text(m, "alternatingflux3") ); } + @SubscribeEvent public void registerTextures(TextureStitchEvent.Pre event){ event.getMap().registerSprite(AlternatingFlux.TEX_PASSTHROUGH_AF); } - @SubscribeEvent - public void registerModels(ModelRegistryEvent evt) + + public void registerIEBlockModel(BLOCK block) { - WireApi.registerConnectorForRender("conn_af", new ResourceLocation("alternatingflux:block/connector/connector_af.obj"), null); - WireApi.registerConnectorForRender("rel_af", new ResourceLocation("alternatingflux:block/connector/relay_af.obj"), null); - WireApi.registerConnectorForRender("transformer_af_left", - new ResourceLocation("alternatingflux:block/connector/transformer_af_left.obj"), null); - WireApi.registerConnectorForRender("transformer_af_right", - new ResourceLocation("alternatingflux:block/connector/transformer_af_right.obj"), null); - - //This is mostly copied from IE's registerModels function in it's ClientProxy, so we can get everything integrated properly. - for(Block block : AlternatingFlux.blocks) + ResourceLocation blockname = block.getRegistryName(); + Item blockItem = Item.getItemFromBlock(block); + if(blockItem == null) throw new RuntimeException("Item representation for block " + blockname + " doesn't exist!"); + if(block instanceof IIEMetaBlock) { - final ResourceLocation loc = Block.REGISTRY.getNameForObject(block); - Item blockItem = Item.getItemFromBlock(block); - if(blockItem==null) - throw new RuntimeException("ITEMBLOCK FOR "+loc+" : "+block+" IS NULL"); - if(block instanceof IIEMetaBlock) + IIEMetaBlock ieMetaBlock = (IIEMetaBlock)block; + if(ieMetaBlock.useCustomStateMapper()) ModelLoader.setCustomStateMapper(block, IECustomStateMapper.getStateMapper(ieMetaBlock)); + ModelLoader.setCustomMeshDefinition(blockItem, new ItemMeshDefinition() { - IIEMetaBlock ieMetaBlock = (IIEMetaBlock)block; - if(ieMetaBlock.useCustomStateMapper()) - ModelLoader.setCustomStateMapper(block, IECustomStateMapper.getStateMapper(ieMetaBlock)); - ModelLoader.setCustomMeshDefinition(blockItem, new ItemMeshDefinition() + @Override + public ModelResourceLocation getModelLocation(ItemStack stack) { - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) - { - return new ModelResourceLocation(loc, "inventory"); - } - }); - for(int meta = 0; meta < ieMetaBlock.getMetaEnums().length; meta++) - { - String location = loc.toString(); - String prop = ieMetaBlock.appendPropertiesToState()?("inventory,"+ieMetaBlock.getMetaProperty().getName()+"="+ieMetaBlock.getMetaEnums()[meta].toString().toLowerCase(Locale.US)): null; - if(ieMetaBlock.useCustomStateMapper()) - { - String custom = ieMetaBlock.getCustomStateMapping(meta, true); - if(custom!=null) - location += "_"+custom; - } - try - { - ModelLoader.setCustomModelResourceLocation(blockItem, meta, new ModelResourceLocation(location, prop)); - } catch(NullPointerException npe) - { - throw new RuntimeException("WELP! apparently "+ieMetaBlock+" lacks an item!", npe); - } + return new ModelResourceLocation(blockname, "inventory"); } - } - //Not needed now - /* else if(block instanceof BlockIEFluid) - mapFluidState(block, ((BlockIEFluid)block).getFluid()); */ - else - ModelLoader.setCustomModelResourceLocation(blockItem, 0, new ModelResourceLocation(loc, "inventory")); - } - - for(Item item : AlternatingFlux.items) - { - if(item instanceof ItemBlock) - continue; - if(item instanceof ItemAFBase) + }); + + for(int meta = 0; meta < ieMetaBlock.getMetaEnums().length; meta++) { - ItemAFBase ieMetaItem = (ItemAFBase)item; - if(ieMetaItem.registerSubModels&&ieMetaItem.getSubNames()!=null&&ieMetaItem.getSubNames().length > 0) - { - for(int meta = 0; meta < ieMetaItem.getSubNames().length; meta++) - { - ResourceLocation loc = new ResourceLocation(AlternatingFlux.MODID, ieMetaItem.itemName+"/"+ieMetaItem.getSubNames()[meta]); - ModelBakery.registerItemVariants(ieMetaItem, loc); - ModelLoader.setCustomModelResourceLocation(ieMetaItem, meta, new ModelResourceLocation(loc, "inventory")); - } - } else + String location = blockname.toString(); + String prop = ieMetaBlock.appendPropertiesToState()?("inventory,"+ieMetaBlock.getMetaProperty().getName()+"="+ieMetaBlock.getMetaEnums()[meta].toString().toLowerCase(Locale.US)): null; + if(ieMetaBlock.useCustomStateMapper()) { - final ResourceLocation loc = new ResourceLocation(AlternatingFlux.MODID, ieMetaItem.itemName); - ModelBakery.registerItemVariants(ieMetaItem, loc); - ModelLoader.setCustomMeshDefinition(ieMetaItem, new ItemMeshDefinition() - { - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) - { - return new ModelResourceLocation(loc, "inventory"); - } - }); + String custom = ieMetaBlock.getCustomStateMapping(meta, true); + if(custom!=null) + location += "_"+custom; } - } else - { - final ResourceLocation loc = Item.REGISTRY.getNameForObject(item); - ModelBakery.registerItemVariants(item, loc); - ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition() + try { - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) - { - return new ModelResourceLocation(loc, "inventory"); - } - }); + ModelLoader.setCustomModelResourceLocation(blockItem, meta, new ModelResourceLocation(location, prop)); + } catch(NullPointerException npe) + { + throw new RuntimeException("WELP! apparently "+ieMetaBlock+" lacks an item!", npe); + } } } + else ModelLoader.setCustomModelResourceLocation(blockItem, 0, new ModelResourceLocation(blockname, "inventory")); } + @SubscribeEvent - public void updateConfig(OnConfigChangedEvent e) + @SuppressWarnings("deprecation") + public void registerModels(ModelRegistryEvent evt) { - if (AlternatingFlux.MODID.equals(e.getModID())) - { - ConfigManager.sync(AlternatingFlux.MODID, net.minecraftforge.common.config.Config.Type.INSTANCE); - Config.refresh(); - } + WireApi.registerConnectorForRender("conn_af", new ResourceLocation("alternatingflux:block/connector/connector_af.obj"), null); + WireApi.registerConnectorForRender("rel_af", new ResourceLocation("alternatingflux:block/connector/relay_af.obj"), null); + WireApi.registerConnectorForRender("transformer_af_left", new ResourceLocation("alternatingflux:block/connector/transformer_af_left.obj"), null); + WireApi.registerConnectorForRender("transformer_af_right", new ResourceLocation("alternatingflux:block/connector/transformer_af_right.obj"), null); + + ModelLoader.setCustomModelResourceLocation(AlternatingFlux.item_coil, 0, new ModelResourceLocation(AlternatingFlux.item_coil.getRegistryName(), "inventory")); + ModelLoader.setCustomModelResourceLocation(AlternatingFlux.item_wire, 0, new ModelResourceLocation(AlternatingFlux.item_wire.getRegistryName(), "inventory")); + this.registerIEBlockModel(AlternatingFlux.block_conn); } } diff --git a/src/main/java/antibluequirk/alternatingflux/item/ItemAFBase.java b/src/main/java/antibluequirk/alternatingflux/item/ItemAFBase.java deleted file mode 100755 index c2be6b4..0000000 --- a/src/main/java/antibluequirk/alternatingflux/item/ItemAFBase.java +++ /dev/null @@ -1,38 +0,0 @@ -package antibluequirk.alternatingflux.item; - -import net.minecraft.block.Block; -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 javax.annotation.Nonnull; -import antibluequirk.alternatingflux.AlternatingFlux; -import blusunrize.immersiveengineering.common.IEContent; -import blusunrize.immersiveengineering.common.blocks.BlockIEBase; -import blusunrize.immersiveengineering.common.blocks.ItemBlockIEBase; -import blusunrize.immersiveengineering.common.items.ItemIEBase; - -public class ItemAFBase extends ItemIEBase { - public ItemAFBase(String name, int stackSize, String... subNames) { - super(name, stackSize, subNames); - fixupItem(this); - } - - //This function allows us to use IEBase classes, by fixing things up so they come from our mod. - //It should be called right after the super call in any constructor of a class that derives from ItemIEBase - //This is kind of hacky, but allows us to avoid copying a lot of code. - @SuppressWarnings("rawtypes") - public static void fixupItem(ItemIEBase item) { - //First, get the item out of IE's registries. - Item rItem = IEContent.registeredIEItems.remove(IEContent.registeredIEItems.size()-1); - if (rItem != item) throw new IllegalStateException("fixupItem was not called at the appropriate time"); - - //Now, reconfigure the block to match our mod. - item.setUnlocalizedName(AlternatingFlux.MODID+"."+item.itemName); - item.setCreativeTab(AlternatingFlux.creativeTab); - - //And add it to our registries. - AlternatingFlux.items.add(item); - } -} \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/item/ItemMaterial.java b/src/main/java/antibluequirk/alternatingflux/item/ItemMaterial.java deleted file mode 100755 index f7c1ed7..0000000 --- a/src/main/java/antibluequirk/alternatingflux/item/ItemMaterial.java +++ /dev/null @@ -1,7 +0,0 @@ -package antibluequirk.alternatingflux.item; - -public class ItemMaterial extends ItemAFBase { - public ItemMaterial() { - super("material", 64, "wire_constantan"); - } -} \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/item/ItemWireCoil.java b/src/main/java/antibluequirk/alternatingflux/item/ItemWireCoil.java index 3b4e702..13440d9 100755 --- a/src/main/java/antibluequirk/alternatingflux/item/ItemWireCoil.java +++ b/src/main/java/antibluequirk/alternatingflux/item/ItemWireCoil.java @@ -1,71 +1,76 @@ package antibluequirk.alternatingflux.item; -import blusunrize.immersiveengineering.common.IESaveData; import blusunrize.immersiveengineering.common.blocks.metal.TileEntityEnergyMeter; import blusunrize.immersiveengineering.common.blocks.metal.TileEntityFeedthrough; import blusunrize.immersiveengineering.common.blocks.metal.TileEntityRedstoneBreaker; -import blusunrize.immersiveengineering.common.util.ItemNBTHelper; -import blusunrize.immersiveengineering.common.util.Utils; +import blusunrize.immersiveengineering.common.items.IEItemInterfaces.IColouredItem; import blusunrize.immersiveengineering.api.ApiUtils; import blusunrize.immersiveengineering.api.Lib; -import blusunrize.immersiveengineering.api.TargetingInfo; -import blusunrize.immersiveengineering.api.energy.wires.IImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.IWireCoil; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; +import blusunrize.immersiveengineering.api.energy.wires.TileEntityImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.WireType; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; +import java.util.Collection; import java.util.HashSet; import java.util.List; -import java.util.Set; - import javax.annotation.Nonnull; import javax.annotation.Nullable; +import antibluequirk.alternatingflux.AlternatingFlux; import antibluequirk.alternatingflux.block.TileEntityRelayAF; import antibluequirk.alternatingflux.block.TileEntityTransformerAF; import antibluequirk.alternatingflux.wire.AFWireType; -public class ItemWireCoil extends ItemAFBase implements IWireCoil { - public ItemWireCoil() { - super("wirecoil", 64, "af"); +public class ItemWireCoil extends Item implements IWireCoil, IColouredItem { + public final Collection> valid_connections; + + public ItemWireCoil() + { + super(); + this.valid_connections = new HashSet>(); + + this.valid_connections.add(TileEntityRelayAF.class); + this.valid_connections.add(TileEntityTransformerAF.class); + this.valid_connections.add(TileEntityRedstoneBreaker.class); + this.valid_connections.add(TileEntityEnergyMeter.class); + this.valid_connections.add(TileEntityFeedthrough.class); + + this.setRegistryName(new ResourceLocation(AlternatingFlux.MODID, "coil_constantan")); + this.setCreativeTab(AlternatingFlux.creativeTab); + this.setTranslationKey("coil_constantan"); } @Override - public WireType getWireType(ItemStack stack) { - switch (stack.getItemDamage()) { - default: - case 0: - return (WireType) AFWireType.AF; - } + public WireType getWireType(ItemStack stack) + { + return AFWireType.instance; } - + @Override - public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { - if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("linkingPos")) { + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if(stack.getTagCompound() != null && stack.getTagCompound().hasKey("linkingPos")) + { int[] link = stack.getTagCompound().getIntArray("linkingPos"); - if (link != null && link.length > 3) { + if(link != null && link.length > 3) + { tooltip.add(I18n.format(Lib.DESC_INFO + "attachedToDim", link[1], link[2], link[3], link[0])); } } } - - + @Nonnull @Override public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) @@ -73,16 +78,13 @@ public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPo return ApiUtils.doCoilUse(this, player, world, pos, hand, side, hitX, hitY, hitZ); } - - public boolean canConnectCable(WireType wire, TileEntity targetEntity) { - //We specifically only support whitelisted TEs here. - //Without this, you can connect the AF wire to any connectable block that doesn't specifically deny it. - if (!(targetEntity instanceof TileEntityRelayAF) && - !(targetEntity instanceof TileEntityTransformerAF) && - !(targetEntity instanceof TileEntityRedstoneBreaker) && - !(targetEntity instanceof TileEntityEnergyMeter) && - !(targetEntity instanceof TileEntityFeedthrough)) - return false; - return true; + @Override + public boolean canConnectCable(ItemStack stack, TileEntity targettile) + { + for(Class tileclass : this.valid_connections) + { + if(targettile.getClass() == tileclass) return true; + } + return false; } } \ No newline at end of file diff --git a/src/main/java/antibluequirk/alternatingflux/wire/AFWireType.java b/src/main/java/antibluequirk/alternatingflux/wire/AFWireType.java index 364389c..756083e 100755 --- a/src/main/java/antibluequirk/alternatingflux/wire/AFWireType.java +++ b/src/main/java/antibluequirk/alternatingflux/wire/AFWireType.java @@ -1,11 +1,13 @@ package antibluequirk.alternatingflux.wire; +import antibluequirk.alternatingflux.AlternatingFluxConfig; + import antibluequirk.alternatingflux.AlternatingFlux; -import antibluequirk.alternatingflux.Config.AFConfig; import antibluequirk.alternatingflux.block.BlockTypes_Connector; import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; import blusunrize.immersiveengineering.api.energy.wires.WireApi; import blusunrize.immersiveengineering.api.energy.wires.WireType; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -13,83 +15,79 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class AFWireType extends WireType { - public static AFWireType AF; - - final int ordinal; - - public static String[] wire_names = { "AF" }; - public static int[] wire_rates; - public static double[] wire_lossratios; - public static int[] wire_length; - - public static int[] wire_colors; - public static double[] wire_renderdias = { 0.078125 }; - - public AFWireType(int ordinal) { - super(); - this.ordinal = ordinal; - } + public static final ResourceLocation texture = new ResourceLocation(AlternatingFlux.MODID, "block/connector/relay_af.obj"); + public static AFWireType instance; + + private AFWireType() {} public static void init() { - AF = new AFWireType(0); - WireApi.registerFeedthroughForWiretype(AF, new ResourceLocation(AlternatingFlux.MODID, "block/connector/relay_af.obj"), - AlternatingFlux.TEX_PASSTHROUGH_AF, new float[]{0, 0, 16, 16}, - .75, (s)->s.getBlock()== AlternatingFlux.block_conn && s.getValue(AlternatingFlux.block_conn.property) == BlockTypes_Connector.RELAY_AF, - 8*30F/AF.getTransferRate(), 15, (f)->f); + instance = new AFWireType(); + IBlockState validconnection = AlternatingFlux.block_conn.getDefaultState().withProperty(AlternatingFlux.block_conn.property, BlockTypes_Connector.RELAY_AF); + WireApi.registerFeedthroughForWiretype(instance, texture, AlternatingFlux.TEX_PASSTHROUGH_AF, new float[]{0, 0, 16, 16}, 0.75, validconnection, 8 * 30F / instance.getTransferRate(), 15, (f)->f); } /** * In this case, this does not return the loss RATIO but the loss PER BLOCK */ @Override - public double getLossRatio() { - return wire_lossratios[ordinal]; + public double getLossRatio() + { + return AlternatingFluxConfig.wireLossRatio; } @Override - public int getTransferRate() { - return wire_rates[ordinal]; + public int getTransferRate() + { + return AlternatingFluxConfig.wireTransferRate; } @Override - public int getColour(Connection connection) { - return wire_colors[ordinal]; + public int getColour(Connection connection) + { + return AlternatingFluxConfig.wireColouration; } @Override - public double getSlack() { + public double getSlack() + { return 1.002; } @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(Connection connection) { + public TextureAtlasSprite getIcon(Connection connection) + { return iconDefaultWire; } @Override - public int getMaxLength() { - return AFConfig.wireLength[ordinal]; + public int getMaxLength() + { + return AlternatingFluxConfig.wireLength; } @Override - public ItemStack getWireCoil() { - return new ItemStack(AlternatingFlux.item_coil, 1, ordinal); + public ItemStack getWireCoil() + { + return new ItemStack(AlternatingFlux.item_coil); } @Override - public String getUniqueName() { - return wire_names[ordinal]; + public String getUniqueName() + { + return AlternatingFlux.MODID; } @Override - public double getRenderDiameter() { - return wire_renderdias[ordinal]; + public double getRenderDiameter() + { + return 0.078125D; } @Override - public boolean isEnergyWire() { + public boolean isEnergyWire() + { return true; } @@ -102,16 +100,12 @@ public String getCategory() @Override public double getDamageRadius() { - switch (ordinal) - { - case 0://AF - return .5; - } - return 0; + return 0.5; } @Override - public boolean canCauseDamage() { + public boolean canCauseDamage() + { return true; } } \ No newline at end of file diff --git a/src/main/resources/assets/alternatingflux/lang/en_us.lang b/src/main/resources/assets/alternatingflux/lang/en_us.lang index 0efe6f2..f419bc7 100755 --- a/src/main/resources/assets/alternatingflux/lang/en_us.lang +++ b/src/main/resources/assets/alternatingflux/lang/en_us.lang @@ -1,11 +1,18 @@ # BLOCKS -tile.alternatingflux.connector.connector_af.name=AF Wire Connector -tile.alternatingflux.connector.relay_af.name=AF Wire Relay -tile.alternatingflux.connector.transformer_af.name=AF Transformer +tile.connector.connector_af.name=AF Wire Connector +tile.connector.relay_af.name=AF Wire Relay +tile.connector.transformer_af.name=AF Transformer # ITEMS -item.alternatingflux.material.wire_constantan.name=Constantan Wire -item.alternatingflux.wirecoil.af.name=AF Wire Coil +item.wire_constantan.name=Constantan Wire +item.coil_constantan.name=AF Wire Coil + +# CONFIG +config.alternatingflux.wireTransferRate.name=Wire Transfer Rate +config.alternatingflux.wireLossRatio.name=Wire Loss Ratio +config.alternatingflux.wireColouration.name=Wire Colour +config.alternatingflux.wireLength.name=Wire Max Length +config.alternatingflux.mergeTab.name=Merge Tabs #CREATIVE itemGroup.alternatingflux=Alternating Flux diff --git a/src/main/resources/assets/alternatingflux/models/item/wirecoil/af.json b/src/main/resources/assets/alternatingflux/models/item/coil_constantan.json similarity index 56% rename from src/main/resources/assets/alternatingflux/models/item/wirecoil/af.json rename to src/main/resources/assets/alternatingflux/models/item/coil_constantan.json index e03dd7c..54c3c28 100755 --- a/src/main/resources/assets/alternatingflux/models/item/wirecoil/af.json +++ b/src/main/resources/assets/alternatingflux/models/item/coil_constantan.json @@ -1,6 +1,6 @@ { "parent":"immersiveengineering:item/ie_item_base", "textures": { - "layer0":"alternatingflux:items/wirecoil_af" + "layer0":"alternatingflux:items/coil_constantan" } } \ No newline at end of file diff --git a/src/main/resources/assets/alternatingflux/models/item/material/wire_constantan.json b/src/main/resources/assets/alternatingflux/models/item/wire_constantan.json similarity index 52% rename from src/main/resources/assets/alternatingflux/models/item/material/wire_constantan.json rename to src/main/resources/assets/alternatingflux/models/item/wire_constantan.json index d6724f2..aed6386 100755 --- a/src/main/resources/assets/alternatingflux/models/item/material/wire_constantan.json +++ b/src/main/resources/assets/alternatingflux/models/item/wire_constantan.json @@ -1,6 +1,6 @@ { "parent":"immersiveengineering:item/ie_item_base", "textures": { - "layer0":"alternatingflux:items/material_wire_constantan" + "layer0":"alternatingflux:items/wire_constantan" } } \ No newline at end of file diff --git a/src/main/resources/assets/alternatingflux/recipes/wire_constantan.json b/src/main/resources/assets/alternatingflux/recipes/wire_constantan.json index 1e778f6..5f0cf33 100755 --- a/src/main/resources/assets/alternatingflux/recipes/wire_constantan.json +++ b/src/main/resources/assets/alternatingflux/recipes/wire_constantan.json @@ -2,7 +2,7 @@ "type": "immersiveengineering:ingredient_shapeless", "damage_tool": 1, "result": { - "item": "alternatingflux:material", + "item": "alternatingflux:wire_constantan", "data": 0 }, "ingredients": [ diff --git a/src/main/resources/assets/alternatingflux/recipes/wirecoil_af.json b/src/main/resources/assets/alternatingflux/recipes/wirecoil_af.json index 6cd69b6..022c0ff 100755 --- a/src/main/resources/assets/alternatingflux/recipes/wirecoil_af.json +++ b/src/main/resources/assets/alternatingflux/recipes/wirecoil_af.json @@ -1,8 +1,8 @@ { "type": "forge:ore_shaped", - "group": "alternatingflux:wirecoil_af", + "group": "alternatingflux:coil_constantan", "result": { - "item": "alternatingflux:wirecoil", + "item": "alternatingflux:coil_constantan", "data": 0, "count": 4 }, diff --git a/src/main/resources/assets/alternatingflux/recipes/wirecoil_af2.json b/src/main/resources/assets/alternatingflux/recipes/wirecoil_af2.json index 06e5e59..1646816 100755 --- a/src/main/resources/assets/alternatingflux/recipes/wirecoil_af2.json +++ b/src/main/resources/assets/alternatingflux/recipes/wirecoil_af2.json @@ -1,8 +1,8 @@ { "type": "forge:ore_shaped", - "group": "alternatingflux:wirecoil_af", + "group": "alternatingflux:coil_constantan", "result": { - "item": "alternatingflux:wirecoil", + "item": "alternatingflux:coil_constantan", "data": 0, "count": 4 }, diff --git a/src/main/resources/assets/alternatingflux/textures/items/wirecoil_af.png b/src/main/resources/assets/alternatingflux/textures/items/coil_constantan.png similarity index 100% rename from src/main/resources/assets/alternatingflux/textures/items/wirecoil_af.png rename to src/main/resources/assets/alternatingflux/textures/items/coil_constantan.png diff --git a/src/main/resources/assets/alternatingflux/textures/items/material_wire_constantan.png b/src/main/resources/assets/alternatingflux/textures/items/wire_constantan.png similarity index 100% rename from src/main/resources/assets/alternatingflux/textures/items/material_wire_constantan.png rename to src/main/resources/assets/alternatingflux/textures/items/wire_constantan.png