diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/chamber2.png b/buildcraft_resources/assets/buildcraft/textures/blocks/chamber2.png new file mode 100755 index 00000000..e49cf41f Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/chamber2.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerCobblestone.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerCobblestone.png old mode 100644 new mode 100755 diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat0.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat0.png new file mode 100755 index 00000000..25088dfa Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat0.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat1.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat1.png new file mode 100755 index 00000000..485231e2 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat1.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat2.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat2.png new file mode 100755 index 00000000..4df76424 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat2.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat3.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat3.png new file mode 100755 index 00000000..42310384 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat3.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat4.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat4.png new file mode 100755 index 00000000..9fc1e854 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat4.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat5.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat5.png new file mode 100755 index 00000000..882bceb4 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat5.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat6.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat6.png new file mode 100755 index 00000000..98816e4d Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat6.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat7.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat7.png new file mode 100755 index 00000000..36e833c2 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat7.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat8.png b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat8.png new file mode 100755 index 00000000..c9a2e085 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/pipePowerHeat8.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png new file mode 100755 index 00000000..ae4f493a Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png.mcmeta b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png.mcmeta new file mode 100755 index 00000000..efc33120 --- /dev/null +++ b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 10 + } +} diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png new file mode 100755 index 00000000..987c6594 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png.mcmeta b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png.mcmeta new file mode 100755 index 00000000..4313bbaa --- /dev/null +++ b/buildcraft_resources/assets/buildcraft/textures/blocks/redplasma_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 10, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} diff --git a/buildcraft_resources/assets/buildcraft/textures/blocks/texture_red_dark - Copie.png b/buildcraft_resources/assets/buildcraft/textures/blocks/texture_red_dark - Copie.png new file mode 100755 index 00000000..af460e18 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/blocks/texture_red_dark - Copie.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/entities/laser_4 - Copie.png b/buildcraft_resources/assets/buildcraft/textures/entities/laser_4 - Copie.png new file mode 100755 index 00000000..145a2f05 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/entities/laser_4 - Copie.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/entities/robot_base.png b/buildcraft_resources/assets/buildcraft/textures/entities/robot_base.png new file mode 100755 index 00000000..413ec076 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/entities/robot_base.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/entities/robot_builder.png b/buildcraft_resources/assets/buildcraft/textures/entities/robot_builder.png new file mode 100755 index 00000000..e4da83fe Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/entities/robot_builder.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/entities/robot_picker.png b/buildcraft_resources/assets/buildcraft/textures/entities/robot_picker.png new file mode 100755 index 00000000..16f539b5 Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/entities/robot_picker.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/items/bucketRedplasma.png b/buildcraft_resources/assets/buildcraft/textures/items/bucketRedplasma.png new file mode 100755 index 00000000..5c41c8dd Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/items/bucketRedplasma.png differ diff --git a/buildcraft_resources/assets/buildcraft/textures/items/redstoneCrystal.png b/buildcraft_resources/assets/buildcraft/textures/items/redstoneCrystal.png new file mode 100755 index 00000000..1939b34c Binary files /dev/null and b/buildcraft_resources/assets/buildcraft/textures/items/redstoneCrystal.png differ diff --git a/common/buildcraft/BuildCraftCore.java b/common/buildcraft/BuildCraftCore.java index f0695824..7aceadb4 100644 --- a/common/buildcraft/BuildCraftCore.java +++ b/common/buildcraft/BuildCraftCore.java @@ -1,9 +1,10 @@ /** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile or - * run the code. It does *NOT* grant the right to redistribute this software or - * its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft; @@ -112,6 +113,7 @@ public class BuildCraftCore { public static Item goldGearItem; public static Item diamondGearItem; public static Item wrenchItem; + public static Item redstoneCrystal; @SideOnly(Side.CLIENT) public static Icon redLaserTexture; @SideOnly(Side.CLIENT) @@ -208,6 +210,7 @@ public class BuildCraftCore { Property ironGearId = BuildCraftCore.mainConfiguration.getItem("ironGearItem.id", DefaultProps.IRON_GEAR_ID); Property goldenGearId = BuildCraftCore.mainConfiguration.getItem("goldenGearItem.id", DefaultProps.GOLDEN_GEAR_ID); Property diamondGearId = BuildCraftCore.mainConfiguration.getItem("diamondGearItem.id", DefaultProps.DIAMOND_GEAR_ID); + Property redstoneCrystalId = BuildCraftCore.mainConfiguration.getItem("redstoneCrystalItem.id", DefaultProps.REDSTONE_CRYSTAL_ID); Property modifyWorldProp = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "modifyWorld", true); modifyWorldProp.comment = "set to false if BuildCraft should not generate custom blocks (e.g. oil)"; modifyWorld = modifyWorldProp.getBoolean(true); @@ -247,6 +250,11 @@ public class BuildCraftCore { CoreProxy.proxy.registerItem(diamondGearItem); OreDictionary.registerOre("gearDiamond", new ItemStack(diamondGearItem)); + redstoneCrystal = (new ItemBuildCraft(redstoneCrystalId.getInt())).setUnlocalizedName("redstoneCrystal"); + LanguageRegistry.addName(redstoneCrystal, "Redstone Crystal"); + CoreProxy.proxy.registerItem(redstoneCrystal); + OreDictionary.registerOre("redstoneCrystal", new ItemStack(redstoneCrystal)); + Property colorBlindProp = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "client.colorblindmode", false); colorBlindProp.comment = "Set to true to enable alternate textures"; colorBlindMode = colorBlindProp.getBoolean(false); diff --git a/common/buildcraft/BuildCraftEnergy.java b/common/buildcraft/BuildCraftEnergy.java index 85653d82..fa886f95 100644 --- a/common/buildcraft/BuildCraftEnergy.java +++ b/common/buildcraft/BuildCraftEnergy.java @@ -1,16 +1,16 @@ /** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile or - * run the code. It does *NOT* grant the right to redistribute this software or - * its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft; import buildcraft.api.fuels.IronEngineCoolant; import buildcraft.api.fuels.IronEngineFuel; import buildcraft.api.recipes.BuildcraftRecipes; -import buildcraft.core.recipes.RefineryRecipeManager; import buildcraft.core.BlockIndex; import buildcraft.core.BlockSpring; import buildcraft.core.DefaultProps; @@ -20,6 +20,8 @@ import buildcraft.core.fluids.BCFluid; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.triggers.BCTrigger; import buildcraft.energy.BlockBuildcraftFluid; +import buildcraft.energy.BlockEnergyEmitter; +import buildcraft.energy.BlockEnergyReceiver; import buildcraft.energy.BlockEngine; import buildcraft.energy.BptBlockEngine; import buildcraft.energy.EnergyProxy; @@ -27,6 +29,8 @@ import buildcraft.energy.GuiHandler; import buildcraft.energy.ItemBucketBuildcraft; import buildcraft.energy.ItemEngine; import buildcraft.energy.BucketHandler; +import buildcraft.energy.TileEnergyEmitter; +import buildcraft.energy.TileEnergyReceiver; import buildcraft.energy.TileEngine.EnergyStage; import buildcraft.energy.triggers.TriggerEngineHeat; import buildcraft.energy.worldgen.BiomeGenOilDesert; @@ -45,7 +49,9 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; + import java.util.TreeMap; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; @@ -71,14 +77,20 @@ public class BuildCraftEnergy { public static BiomeGenOilDesert biomeOilDesert; public static BiomeGenOilOcean biomeOilOcean; public static BlockEngine engineBlock; + public static BlockEnergyEmitter emitterBlock; + public static BlockEnergyReceiver receiverBlock; private static Fluid buildcraftFluidOil; private static Fluid buildcraftFluidFuel; + private static Fluid buildcraftFluidRedPlasma; public static Fluid fluidOil; public static Fluid fluidFuel; + public static Fluid fluidRedPlasma; public static Block blockOil; public static Block blockFuel; + public static Block blockRedPlasma; public static Item bucketOil; public static Item bucketFuel; + public static Item bucketRedPlasma; public static Item fuel; public static boolean canOilBurn; public static double oilWellScalar = 1.0; @@ -103,8 +115,10 @@ public class BuildCraftEnergy { int blockOilId = BuildCraftCore.mainConfiguration.getBlock("oil.id", defaultOilId).getInt(defaultOilId); int blockFuelId = BuildCraftCore.mainConfiguration.getBlock("fuel.id", DefaultProps.FUEL_ID).getInt(DefaultProps.FUEL_ID); + int blockRedplasmaId = BuildCraftCore.mainConfiguration.getBlock("redPlasma.id", DefaultProps.REDPLASMA_ID).getInt(DefaultProps.REDPLASMA_ID); int bucketOilId = BuildCraftCore.mainConfiguration.getItem("bucketOil.id", DefaultProps.BUCKET_OIL_ID).getInt(DefaultProps.BUCKET_OIL_ID); int bucketFuelId = BuildCraftCore.mainConfiguration.getItem("bucketFuel.id", DefaultProps.BUCKET_FUEL_ID).getInt(DefaultProps.BUCKET_FUEL_ID); + int bucketRedPlasmaId = BuildCraftCore.mainConfiguration.getItem("bucketRedPlasma.id", DefaultProps.BUCKET_REDPLASMA_ID).getInt(DefaultProps.BUCKET_REDPLASMA_ID); int oilDesertBiomeId = BuildCraftCore.mainConfiguration.get("biomes", "oilDesert", DefaultProps.BIOME_OIL_DESERT).getInt(DefaultProps.BIOME_OIL_DESERT); int oilOceanBiomeId = BuildCraftCore.mainConfiguration.get("biomes", "oilOcean", DefaultProps.BIOME_OIL_OCEAN).getInt(DefaultProps.BIOME_OIL_OCEAN); canOilBurn = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "burnOil", true, "Can oil burn?").getBoolean(true); @@ -146,7 +160,6 @@ public class BuildCraftEnergy { // Oil and fuel buildcraftFluidOil = new BCFluid("oil").setDensity(800).setViscosity(1500); - FluidRegistry.registerFluid(buildcraftFluidOil); fluidOil = FluidRegistry.getFluid("oil"); @@ -154,6 +167,12 @@ public class BuildCraftEnergy { FluidRegistry.registerFluid(buildcraftFluidFuel); fluidFuel = FluidRegistry.getFluid("fuel"); + buildcraftFluidRedPlasma = new BCFluid("redplasma").setDensity(10000).setViscosity(10000).setLuminosity(30); + FluidRegistry.registerFluid(buildcraftFluidRedPlasma); + fluidRedPlasma = FluidRegistry.getFluid("redplasma"); + + //buildcraftFluidRedPlasma = new BCFluid("fuel"); + if (fluidOil.getBlockID() == -1) { if (blockOilId > 0) { blockOil = new BlockBuildcraftFluid(blockOilId, fluidOil, Material.water).setFlammable(canOilBurn).setFlammability(0); @@ -184,6 +203,18 @@ public class BuildCraftEnergy { blockFuel = Block.blocksList[fluidFuel.getBlockID()]; } + if (fluidRedPlasma.getBlockID() == -1) { + if (blockRedplasmaId > 0) { + blockRedPlasma = new BlockBuildcraftFluid(blockRedplasmaId, fluidRedPlasma, Material.water).setFlammable(false).setParticleColor(0.9F, 0, 0); + blockRedPlasma.setUnlocalizedName("blockRedPlasma"); + CoreProxy.proxy.addName(blockRedPlasma, "Red Plasma"); + CoreProxy.proxy.registerBlock(blockRedPlasma); + fluidRedPlasma.setBlockID(blockRedPlasma); + } + } else { + blockRedPlasma = Block.blocksList[fluidRedPlasma.getBlockID()]; + } + // Buckets if (blockOil != null && bucketOilId > 0) { @@ -202,8 +233,17 @@ public class BuildCraftEnergy { FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("fuel", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(bucketFuel), new ItemStack(Item.bucketEmpty)); } + if (blockRedPlasma != null && bucketRedPlasmaId > 0) { + bucketRedPlasma = new ItemBucketBuildcraft(bucketRedPlasmaId, blockRedPlasma.blockID); + bucketRedPlasma.setUnlocalizedName("bucketRedPlasma").setContainerItem(Item.bucketEmpty); + LanguageRegistry.addName(bucketRedPlasma, "Red Plasma Bucket"); + CoreProxy.proxy.registerItem(bucketRedPlasma); + FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("redplasma", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(bucketRedPlasma), new ItemStack(Item.bucketEmpty)); + } + BucketHandler.INSTANCE.buckets.put(blockOil, bucketOil); BucketHandler.INSTANCE.buckets.put(blockFuel, bucketFuel); + BucketHandler.INSTANCE.buckets.put(blockRedPlasma, bucketRedPlasma); MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); BuildcraftRecipes.refinery.addRecipe(new FluidStack(fluidOil, 1), new FluidStack(fluidFuel, 1), 12, 1); @@ -217,6 +257,20 @@ public class BuildCraftEnergy { IronEngineCoolant.addCoolant(FluidRegistry.getFluid("water"), 0.0023F); IronEngineCoolant.addCoolant(Block.ice.blockID, 0, FluidRegistry.getFluidStack("water", FluidContainerRegistry.BUCKET_VOLUME * 2)); + // Receiver / emitter + + Property emitterId = BuildCraftCore.mainConfiguration.getBlock("energyEmitter.id", DefaultProps.EMITTER_ID); + emitterBlock = new BlockEnergyEmitter (emitterId.getInt()); + CoreProxy.proxy.registerBlock(emitterBlock.setUnlocalizedName("energyEmitterBlock")); + CoreProxy.proxy.addName(emitterBlock, "Energy Emitter"); + CoreProxy.proxy.registerTileEntity(TileEnergyEmitter.class, "net.minecraft.src.builders.TileEnergyEmitter"); + + Property receiverId = BuildCraftCore.mainConfiguration.getBlock("energyReceiver.id", DefaultProps.RECEIVER_ID); + receiverBlock = new BlockEnergyReceiver (receiverId.getInt()); + CoreProxy.proxy.registerBlock(receiverBlock.setUnlocalizedName("energyReceiverBlock")); + CoreProxy.proxy.addName(receiverBlock, "Energy Receiver"); + CoreProxy.proxy.registerTileEntity(TileEnergyReceiver.class, "net.minecraft.src.builders.TileEnergyReceiver"); + MinecraftForge.EVENT_BUS.register(this); } @@ -247,6 +301,7 @@ public class BuildCraftEnergy { if (event.map.textureType == 0) { buildcraftFluidOil.setIcons(blockOil.getBlockTextureFromSide(1), blockOil.getBlockTextureFromSide(2)); buildcraftFluidFuel.setIcons(blockFuel.getBlockTextureFromSide(1), blockFuel.getBlockTextureFromSide(2)); + buildcraftFluidRedPlasma.setIcons(blockRedPlasma.getBlockTextureFromSide(1), blockRedPlasma.getBlockTextureFromSide(2)); } } diff --git a/common/buildcraft/BuildCraftFactory.java b/common/buildcraft/BuildCraftFactory.java index 4ed83863..fc7e259c 100644 --- a/common/buildcraft/BuildCraftFactory.java +++ b/common/buildcraft/BuildCraftFactory.java @@ -1,9 +1,10 @@ /** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile or - * run the code. It does *NOT* grant the right to redistribute this software or - * its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft; @@ -331,7 +332,7 @@ public class BuildCraftFactory { 'G', BuildCraftCore.ironGearItem, 'F', new ItemStack(Block.fenceIron)); } - + @EventHandler public void processIMCRequests(FMLInterModComms.IMCEvent event) { InterModComms.processIMC(event); diff --git a/common/buildcraft/BuildCraftSilicon.java b/common/buildcraft/BuildCraftSilicon.java index 0962c691..0c4f5097 100644 --- a/common/buildcraft/BuildCraftSilicon.java +++ b/common/buildcraft/BuildCraftSilicon.java @@ -1,9 +1,10 @@ /** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile or - * run the code. It does *NOT* grant the right to redistribute this software or - * its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft; @@ -160,7 +161,7 @@ public class BuildCraftSilicon { BuildcraftRecipes.assemblyTable.addRecipe(60000, Chipset.QUARTZ.getStack(), Item.redstone, Item.netherQuartz); BuildcraftRecipes.assemblyTable.addRecipe(60000, Chipset.COMP.getStack(), Item.redstone, Item.comparator); - // GATES + // GATES BuildcraftRecipes.assemblyTable.addRecipe(10000, ItemGate.makeGateItem(GateMaterial.REDSTONE, GateLogic.AND), Chipset.RED.getStack(), PipeWire.RED.getStack()); addGateRecipe(20000, GateMaterial.IRON, Chipset.IRON, PipeWire.RED, PipeWire.BLUE); diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index 902f13ed..36e498cb 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -1,9 +1,10 @@ /** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile or - * run the code. It does *NOT* grant the right to redistribute this software or - * its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft; @@ -70,6 +71,7 @@ import buildcraft.transport.pipes.PipeItemsWood; import buildcraft.transport.pipes.PipePowerCobblestone; import buildcraft.transport.pipes.PipePowerDiamond; import buildcraft.transport.pipes.PipePowerGold; +import buildcraft.transport.pipes.PipePowerHeat; import buildcraft.transport.pipes.PipePowerIron; import buildcraft.transport.pipes.PipePowerIron.PowerMode; import buildcraft.transport.pipes.PipePowerQuartz; @@ -101,7 +103,9 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; + import java.util.LinkedList; + import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; @@ -149,6 +153,7 @@ public class BuildCraftTransport { public static Item pipePowerIron; public static Item pipePowerGold; public static Item pipePowerDiamond; + public static Item pipePowerHeat; public static ItemFacade facadeItem; public static Item plugItem; public static BlockFilteredBuffer filteredBufferBlock; @@ -305,6 +310,7 @@ public class BuildCraftTransport { pipePowerIron = buildPipe(DefaultProps.PIPE_POWER_IRON_ID, PipePowerIron.class, "Iron Kinesis Pipe", Item.redstone, pipeItemsIron); pipePowerGold = buildPipe(DefaultProps.PIPE_POWER_GOLD_ID, PipePowerGold.class, "Golden Kinesis Pipe", Item.redstone, pipeItemsGold); pipePowerDiamond = buildPipe(DefaultProps.PIPE_POWER_DIAMOND_ID, PipePowerDiamond.class, "Diamond Kinesis Pipe", Item.redstone, pipeItemsDiamond); + pipePowerHeat = buildPipe(DefaultProps.PIPE_POWER_HEAT_ID, PipePowerHeat.class, "Heat Kinesis Pipe", Block.furnaceIdle, pipeItemsDiamond); pipeStructureCobblestone = buildPipe(DefaultProps.PIPE_STRUCTURE_COBBLESTONE_ID, PipeStructureCobblestone.class, "Cobblestone Structure Pipe", Block.gravel, pipeItemsCobblestone); diff --git a/common/buildcraft/builders/TileArchitect.java b/common/buildcraft/builders/TileArchitect.java index aca35a06..75e3546d 100644 --- a/common/buildcraft/builders/TileArchitect.java +++ b/common/buildcraft/builders/TileArchitect.java @@ -157,7 +157,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory { } } - RPCHandler.rpcBroadcastPlayers(this, "setName", DefaultProps.NETWORK_UPDATE_RANGE, name); + RPCHandler.rpcBroadcastPlayersAtDistance(this, "setName", DefaultProps.NETWORK_UPDATE_RANGE, name); } @RPC diff --git a/common/buildcraft/core/BlockScanner.java b/common/buildcraft/core/BlockScanner.java new file mode 100755 index 00000000..b1b9db72 --- /dev/null +++ b/common/buildcraft/core/BlockScanner.java @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.core; + +import java.util.Iterator; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +public class BlockScanner implements Iterable { + + Box box; + World world; + + int x, y, z; + int iterations; + + class BlockIt implements Iterator { + + int it = 0; + + @Override + public boolean hasNext() { + return it <= iterations; + } + + @Override + public BlockWrapper next() { + if (x <= box.xMax) { + x++; + } else { + x = box.xMin; + + if (y <= box.yMax) { + y++; + } else { + y = box.yMin; + + if (z <= box.zMax) { + z++; + } else { + z = box.zMin; + } + } + } + + it++; + + BlockWrapper w = new BlockWrapper(); + w.index = new BlockIndex(x, y, z); + w.block = Block.blocksList [world.getBlockId(x, y, z)]; + w.tile = world.getBlockTileEntity(x, y, z); + + return w; + } + + @Override + public void remove() { + + } + } + + public BlockScanner (Box box, World world, int iterations) { + this.box = box; + this.world = world; + this.iterations = iterations; + + x = box.xMin; + y = box.yMin; + z = box.zMin; + } + + @Override + public Iterator iterator() { + return new BlockIt(); + } + +} diff --git a/common/buildcraft/core/BlockWrapper.java b/common/buildcraft/core/BlockWrapper.java new file mode 100755 index 00000000..87d6eac8 --- /dev/null +++ b/common/buildcraft/core/BlockWrapper.java @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.core; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; + +public class BlockWrapper { + public BlockIndex index; + public TileEntity tile; + public Block block; +} \ No newline at end of file diff --git a/common/buildcraft/core/DefaultProps.java b/common/buildcraft/core/DefaultProps.java index 8db48690..216c62c0 100644 --- a/common/buildcraft/core/DefaultProps.java +++ b/common/buildcraft/core/DefaultProps.java @@ -37,9 +37,11 @@ public class DefaultProps { public static int TEMPLATE_ITEM_ID = 19105; public static int WRENCH_ID = 19106; public static int BUCKET_OIL_ID = 19107; + public static int REDSTONE_CRYSTAL_ID = 19108; public static int PIPE_WATERPROOF_ID = 19109; public static int BUCKET_FUEL_ID = 19110; public static int GATE_ID = 19111; + public static int BUCKET_REDPLASMA_ID = 19112; public static int PIPE_WIRE = 19113; public static int REDSTONE_CHIPSET = 19117; public static int BLUEPRINT_ITEM_ID = 19118; @@ -85,6 +87,7 @@ public class DefaultProps { public static int PIPE_POWER_QUARTZ_ID = 19208; public static int PIPE_POWER_LAPIS_ID = 19209; public static int PIPE_POWER_DIAZULI_ID = 19210; + public static int PIPE_POWER_HEAT_ID = 19211; public static int PIPE_ITEMS_VOID_ID = 19220; public static int PIPE_LIQUIDS_VOID_ID = 19221; @@ -115,10 +118,14 @@ public class DefaultProps { public static int FILTERED_BUFFER_ID = 1523; public static int FLOOD_GATE_ID = 1524; + public static int RECEIVER_ID = 1525; + public static int EMITTER_ID = 1526; + public static int OIL_ID = 1530; public static int FUEL_ID = 1531; + public static int REDPLASMA_ID = 1532; - public static int URBANIST_ID = 1532; + public static int URBANIST_ID = 1533; public static boolean CURRENT_CONTINUOUS = false; public static double PIPES_DURABILITY = 0.25D; diff --git a/common/buildcraft/core/IInventoryRenderer.java b/common/buildcraft/core/IInventoryRenderer.java index 1caf7a44..c3baf38e 100644 --- a/common/buildcraft/core/IInventoryRenderer.java +++ b/common/buildcraft/core/IInventoryRenderer.java @@ -1,14 +1,17 @@ /** - * Copyright (c) SpaceToad, 2011 + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com * * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ - package buildcraft.core; +/** + * This interface is used to provide special renders of tiles in the player + * inventory. + */ public interface IInventoryRenderer { public void inventoryRender(double x, double y, double z, float f, float f1); diff --git a/common/buildcraft/core/LaserData.java b/common/buildcraft/core/LaserData.java index 59d84b0e..aeaf5224 100755 --- a/common/buildcraft/core/LaserData.java +++ b/common/buildcraft/core/LaserData.java @@ -7,7 +7,13 @@ public class LaserData { public double renderSize = 0; public double angleY = 0; public double angleZ = 0; - public boolean isVisible = false; + public boolean isVisible = true; + + public double wavePosition = 0; + public int laserTexAnimation = 0; + + // Size of the wave, from 0 to 1 + public float waveSize = 1F; public void update () { double dx = head.x - tail.x; @@ -17,6 +23,10 @@ public class LaserData { renderSize = Math.sqrt(dx * dx + dy * dy + dz * dz); angleZ = 360 - (Math.atan2(dz, dx) * 180.0 / Math.PI + 180.0); dx = Math.sqrt(renderSize * renderSize - dy * dy); - angleY = -Math.atan2(dy, dx) * 180 / Math.PI; + angleY = -Math.atan2(dy, dx) * 180.0 / Math.PI; + } + + public void iterateTexture () { + laserTexAnimation = (laserTexAnimation + 1) % 40; } } diff --git a/common/buildcraft/core/ReflectAPI.java b/common/buildcraft/core/ReflectAPI.java new file mode 100755 index 00000000..17c530c8 --- /dev/null +++ b/common/buildcraft/core/ReflectAPI.java @@ -0,0 +1,26 @@ +package buildcraft.core; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +public class ReflectAPI { + + public static String KEY_MJ_STORED = "_MJ_STORED"; + static Map MAP_MJ_STORED = new HashMap (); + + public static Field get_MJ_STORED (Class c) { + if (!MAP_MJ_STORED.containsKey(c)) { + for (Field f : c.getFields()) { + if (f.getName().equals(KEY_MJ_STORED)) { + return MAP_MJ_STORED.put(c, f); + } + } + + return MAP_MJ_STORED.put(c, null); + } else { + return MAP_MJ_STORED.get(c); + } + } + +} diff --git a/common/buildcraft/core/TileBuffer.java b/common/buildcraft/core/TileBuffer.java index f06debd2..bfc82c49 100644 --- a/common/buildcraft/core/TileBuffer.java +++ b/common/buildcraft/core/TileBuffer.java @@ -1,8 +1,9 @@ /** - * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public License - * 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.core; @@ -17,7 +18,7 @@ public final class TileBuffer { private int blockID = 0; private TileEntity tile; - private final SafeTimeTracker tracker = new SafeTimeTracker(); + private final SafeTimeTracker tracker = new SafeTimeTracker(20, 5); private final World world; final int x, y, z; private final boolean loadUnloaded; @@ -35,12 +36,15 @@ public final class TileBuffer { public final void refresh() { tile = null; blockID = 0; + if (!loadUnloaded && !world.blockExists(x, y, z)) { return; } + blockID = world.getBlockId(this.x, this.y, this.z); Block block = Block.blocksList[blockID]; + if (block != null && block.hasTileEntity(world.getBlockMetadata(this.x, this.y, this.z))) { tile = world.getBlockTileEntity(this.x, this.y, this.z); } @@ -53,10 +57,11 @@ public final class TileBuffer { } public int getBlockID() { - if (tile != null && !tile.isInvalid()) + if (tile != null && !tile.isInvalid()) { return blockID; + } - if (tracker.markTimeIfDelay(world, 20)) { + if (tracker.markTimeIfDelay(world)) { refresh(); if (tile != null && !tile.isInvalid()) @@ -67,31 +72,37 @@ public final class TileBuffer { } public TileEntity getTile() { - if (tile != null && !tile.isInvalid()) + if (tile != null && !tile.isInvalid()) { return tile; + } - if (tracker.markTimeIfDelay(world, 20)) { + if (tracker.markTimeIfDelay(world)) { refresh(); - if (tile != null && !tile.isInvalid()) + if (tile != null && !tile.isInvalid()) { return tile; + } } return null; } public boolean exists() { - if(tile != null && !tile.isInvalid()) + if(tile != null && !tile.isInvalid()) { return true; + } + return world.blockExists(x, y, z); } public static TileBuffer[] makeBuffer(World world, int x, int y, int z, boolean loadUnloaded) { TileBuffer[] buffer = new TileBuffer[6]; + for (int i = 0; i < 6; i++) { ForgeDirection d = ForgeDirection.getOrientation(i); buffer[i] = new TileBuffer(world, x + d.offsetX, y + d.offsetY, z + d.offsetZ, loadUnloaded); } + return buffer; } } diff --git a/common/buildcraft/core/network/PacketHandler.java b/common/buildcraft/core/network/PacketHandler.java index aebd43b5..fd37ca76 100644 --- a/common/buildcraft/core/network/PacketHandler.java +++ b/common/buildcraft/core/network/PacketHandler.java @@ -3,8 +3,8 @@ package buildcraft.core.network; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; -import java.io.ObjectInputStream; +import buildcraft.transport.TileGenericPipe; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; @@ -13,7 +13,6 @@ import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; -import cpw.mods.fml.repackage.com.nothome.delta.DebugDiffWriter; public class PacketHandler implements IPacketHandler { @@ -69,8 +68,8 @@ public class PacketHandler implements IPacketHandler { break; } - case PacketIds.RPC: { - PacketRPC rpc = new PacketRPC(); + case PacketIds.RPC_TILE: { + PacketRPCTile rpc = new PacketRPCTile(); rpc.sender = (EntityPlayer) player; int dimId = data.readShort(); @@ -99,6 +98,39 @@ public class PacketHandler implements IPacketHandler { break; } + + case PacketIds.RPC_PIPE: { + PacketRPCPipe rpc = new PacketRPCPipe(); + rpc.sender = (EntityPlayer) player; + + int dimId = data.readShort(); + World world = null; + + if (!rpc.sender.worldObj.isRemote) { + // if this is a server, then get the world + + world = DimensionManager.getProvider(dimId).worldObj; + } else if (rpc.sender.worldObj.provider.dimensionId == dimId) { + // if the player is on this world, then synchronize things + + world = rpc.sender.worldObj; + } + + if (world != null) { + int x = data.readInt(); + int y = data.readInt(); + int z = data.readInt(); + + TileEntity tile = world.getBlockTileEntity(x, y, z); + + if (tile instanceof TileGenericPipe) { + rpc.setPipe (((TileGenericPipe) tile).pipe); + rpc.readData(data); + } + } + + break; + } } } catch (Exception ex) { ex.printStackTrace(); diff --git a/common/buildcraft/core/network/PacketIds.java b/common/buildcraft/core/network/PacketIds.java index 5b8ae054..48b80b2d 100644 --- a/common/buildcraft/core/network/PacketIds.java +++ b/common/buildcraft/core/network/PacketIds.java @@ -42,5 +42,6 @@ public class PacketIds { public static final int STATE_UPDATE = 100; - public static final int RPC = 110; + public static final int RPC_TILE = 110; + public static final int RPC_PIPE = 111; } diff --git a/common/buildcraft/core/network/PacketRPCPipe.java b/common/buildcraft/core/network/PacketRPCPipe.java new file mode 100755 index 00000000..8528d656 --- /dev/null +++ b/common/buildcraft/core/network/PacketRPCPipe.java @@ -0,0 +1,49 @@ +package buildcraft.core.network; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import buildcraft.transport.Pipe; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; + +public class PacketRPCPipe extends BuildCraftPacket { + + public Pipe pipe; + + byte [] contents; + + public EntityPlayer sender; + + public PacketRPCPipe () { + + } + + public PacketRPCPipe (byte [] bytes) { + contents = bytes; + } + + public void setPipe (Pipe aPipe) { + pipe = aPipe; + } + + @Override + public int getID() { + return PacketIds.RPC_PIPE; + } + + @Override + public void readData(DataInputStream data) throws IOException { + RPCMessageInfo info = new RPCMessageInfo(); + info.sender = sender; + + RPCHandler.receiveRPC(pipe, info, data); + } + + @Override + public void writeData(DataOutputStream data) throws IOException { + data.write(contents); + } + +} diff --git a/common/buildcraft/core/network/PacketRPC.java b/common/buildcraft/core/network/PacketRPCTile.java similarity index 76% rename from common/buildcraft/core/network/PacketRPC.java rename to common/buildcraft/core/network/PacketRPCTile.java index 6d5eb233..403d2ced 100755 --- a/common/buildcraft/core/network/PacketRPC.java +++ b/common/buildcraft/core/network/PacketRPCTile.java @@ -7,11 +7,7 @@ import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; -import org.bouncycastle.crypto.util.Pack; - -import cpw.mods.fml.common.network.Player; - -public class PacketRPC extends BuildCraftPacket { +public class PacketRPCTile extends BuildCraftPacket { public TileEntity tile; @@ -19,11 +15,11 @@ public class PacketRPC extends BuildCraftPacket { public EntityPlayer sender; - public PacketRPC () { + public PacketRPCTile () { } - public PacketRPC (byte [] bytes) { + public PacketRPCTile (byte [] bytes) { contents = bytes; } @@ -33,7 +29,7 @@ public class PacketRPC extends BuildCraftPacket { @Override public int getID() { - return PacketIds.RPC; + return PacketIds.RPC_TILE; } @Override diff --git a/common/buildcraft/core/network/RPCHandler.java b/common/buildcraft/core/network/RPCHandler.java index ca9f8c5c..75e0df8f 100755 --- a/common/buildcraft/core/network/RPCHandler.java +++ b/common/buildcraft/core/network/RPCHandler.java @@ -12,7 +12,9 @@ import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; +import buildcraft.core.DefaultProps; import buildcraft.core.proxy.CoreProxy; +import buildcraft.transport.Pipe; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.tileentity.TileEntity; @@ -67,6 +69,8 @@ public class RPCHandler { // accepted } else if (mapping.parameters [j].equals(char.class)) { // accepted + } else if (mapping.parameters [j].equals(float.class)) { + // accepted } else if (mapping.parameters [j].equals(String.class)) { // accepted } else if (mapping.parameters [j].equals(RPCMessageInfo.class)) { @@ -88,7 +92,7 @@ public class RPCHandler { handlers.put (tile.getClass().getName(), new RPCHandler (tile.getClass())); } - PacketRPC packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); + PacketRPCTile packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); if (packet != null) { CoreProxy.proxy.sendToServer(packet.getPacket()); @@ -100,19 +104,27 @@ public class RPCHandler { handlers.put (tile.getClass().getName(), new RPCHandler (tile.getClass())); } - PacketRPC packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); + PacketRPCTile packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); if (packet != null) { CoreProxy.proxy.sendToPlayer(player, packet); } } - public static void rpcBroadcastPlayers (TileEntity tile, String method, int maxDistance, Object ... actuals) { + public static void rpcBroadcastDefaultPlayers (Pipe pipe, String method, Object ... actuals) { + RPCHandler.rpcBroadcastPlayers(pipe, method, DefaultProps.NETWORK_UPDATE_RANGE, actuals); + } + + public static void rpcBroadcastPlayers (TileEntity tile, String method, Object ... actuals) { + RPCHandler.rpcBroadcastPlayersAtDistance(tile, method, DefaultProps.NETWORK_UPDATE_RANGE, actuals); + } + + public static void rpcBroadcastPlayersAtDistance (TileEntity tile, String method, int maxDistance, Object ... actuals) { if (!handlers.containsKey(tile.getClass().getName())) { handlers.put (tile.getClass().getName(), new RPCHandler (tile.getClass())); } - PacketRPC packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); + PacketRPCTile packet = handlers.get (tile.getClass().getName()).createRCPPacket(tile, method, actuals); if (packet != null) { for (Object o : tile.worldObj.playerEntities) { @@ -127,15 +139,109 @@ public class RPCHandler { } } - public static void receiveRPC (TileEntity tile, RPCMessageInfo info, DataInputStream data) { - if (!handlers.containsKey(tile.getClass().getName())) { - handlers.put (tile.getClass().getName(), new RPCHandler (tile.getClass())); + public static void rpcBroadcastPlayers (Pipe pipe, String method, int maxDistance, Object ... actuals) { + if (!handlers.containsKey(pipe.getClass().getName())) { + handlers.put (pipe.getClass().getName(), new RPCHandler (pipe.getClass())); } - handlers.get (tile.getClass().getName()).internalRpcReceive(tile, info, data); + PacketRPCPipe packet = handlers.get (pipe.getClass().getName()).createRCPPacket(pipe, method, actuals); + + if (packet != null) { + for (Object o : pipe.container.worldObj.playerEntities) { + EntityPlayerMP player = (EntityPlayerMP) o; + + if (Math.abs(player.posX - pipe.container.xCoord) <= maxDistance + && Math.abs(player.posY - pipe.container.yCoord) <= maxDistance + && Math.abs(player.posZ - pipe.container.zCoord) <= maxDistance) { + CoreProxy.proxy.sendToPlayer(player, packet); + } + } + } } - private PacketRPC createRCPPacket (TileEntity tile, String method, Object ... actuals) { + public static void receiveRPC (TileEntity tile, RPCMessageInfo info, DataInputStream data) { + if (tile != null) { + if (!handlers.containsKey(tile.getClass().getName())) { + handlers.put(tile.getClass().getName(), + new RPCHandler(tile.getClass())); + } + + handlers.get(tile.getClass().getName()).internalRpcReceive(tile, + info, data); + } + } + + public static void receiveRPC (Pipe pipe, RPCMessageInfo info, DataInputStream data) { + if (pipe != null) { + if (!handlers.containsKey(pipe.getClass().getName())) { + handlers.put(pipe.getClass().getName(), + new RPCHandler(pipe.getClass())); + } + + handlers.get(pipe.getClass().getName()).internalRpcReceive(pipe, + info, data); + } + } + + private PacketRPCPipe createRCPPacket (Pipe pipe, String method, Object ... actuals) { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + DataOutputStream data = new DataOutputStream(bytes); + + try { + TileEntity tile = pipe.container; + + // In order to save space on message, we assuming dimensions ids + // small. Maybe worth using a varint instead + data.writeShort(tile.worldObj.provider.dimensionId); + data.writeInt(tile.xCoord); + data.writeInt(tile.yCoord); + data.writeInt(tile.zCoord); + + writeParameters(method, data, actuals); + + data.flush(); + } catch (IOException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return new PacketRPCPipe(bytes.toByteArray()); + } + + private PacketRPCTile createRCPPacket (TileEntity tile, String method, Object ... actuals) { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + DataOutputStream data = new DataOutputStream(bytes); + + try { + // In order to save space on message, we assuming dimensions ids + // small. Maybe worth using a varint instead + data.writeShort(tile.worldObj.provider.dimensionId); + data.writeInt(tile.xCoord); + data.writeInt(tile.yCoord); + data.writeInt(tile.zCoord); + + writeParameters(method, data, actuals); + + data.flush(); + } catch (IOException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return new PacketRPCTile(bytes.toByteArray()); + } + + private void writeParameters (String method, DataOutputStream data, Object ... actuals) throws IOException, IllegalArgumentException, IllegalAccessException { if (!methodsMap.containsKey(method)) { throw new RuntimeException(method + " is not a callable method of " + getClass().getName()); } @@ -154,46 +260,24 @@ public class RPCHandler { + " expects " + m.parameters.length + "parameters, not " + actuals.length); } - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - DataOutputStream data = new DataOutputStream(bytes); + data.writeShort(methodIndex); - try { - // In order to save space on message, we assuming dimensions ids - // small. Maybe worth using a varint instead - data.writeShort(tile.worldObj.provider.dimensionId); - data.writeInt(tile.xCoord); - data.writeInt(tile.yCoord); - data.writeInt(tile.zCoord); - - data.writeShort(methodIndex); - - for (int i = 0; i < actuals.length; ++i) { - if (formals [i].equals(int.class)) { - data.writeInt((Integer) actuals [i]); - } else if (formals [i].equals(char.class)) { - data.writeChar((Character) actuals [i]); - } else if (formals [i].equals(String.class)) { - data.writeUTF((String) actuals [i]); - } else { - m.mappings [i].setData(actuals [i], data); - } + for (int i = 0; i < actuals.length; ++i) { + if (formals [i].equals(int.class)) { + data.writeInt((Integer) actuals [i]); + } else if (formals [i].equals(float.class)) { + data.writeFloat((Float) actuals [i]); + } else if (formals [i].equals(char.class)) { + data.writeChar((Character) actuals [i]); + } else if (formals [i].equals(String.class)) { + data.writeUTF((String) actuals [i]); + } else { + m.mappings [i].setData(actuals [i], data); } - - data.flush(); - } catch (IOException e) { - e.printStackTrace(); - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalAccessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } - - return new PacketRPC(bytes.toByteArray()); } - private void internalRpcReceive (TileEntity tile, RPCMessageInfo info, DataInputStream data) { + private void internalRpcReceive (Object o, RPCMessageInfo info, DataInputStream data) { try { short methodIndex = data.readShort(); @@ -207,6 +291,8 @@ public class RPCHandler { for (int i = 0; i < expectedParameters; ++i) { if (formals [i].equals(int.class)) { actuals [i] = data.readInt(); + } else if (formals [i].equals(float.class)) { + actuals [i] = data.readFloat(); } else if (formals [i].equals(char.class)) { actuals [i] = data.readChar(); } else if (formals [i].equals(String.class)) { @@ -220,7 +306,7 @@ public class RPCHandler { actuals [actuals.length - 1] = info; } - m.method.invoke(tile, actuals); + m.method.invoke(o, actuals); } catch (IOException e) { e.printStackTrace(); } catch (IllegalAccessException e) { diff --git a/common/buildcraft/core/render/RenderEnergyLaser.java b/common/buildcraft/core/render/RenderEnergyLaser.java index 7c3027dc..a7547155 100644 --- a/common/buildcraft/core/render/RenderEnergyLaser.java +++ b/common/buildcraft/core/render/RenderEnergyLaser.java @@ -9,8 +9,6 @@ package buildcraft.core.render; -import buildcraft.core.EntityEnergyLaser; -import buildcraft.core.EntityLaser; import net.minecraft.client.model.ModelRenderer; public class RenderEnergyLaser extends RenderLaser { @@ -26,21 +24,4 @@ public class RenderEnergyLaser extends RenderLaser { box[i].rotationPointZ = 0; } } - - @Override - protected ModelRenderer getBox(EntityLaser laser) { - EntityEnergyLaser eLaser = (EntityEnergyLaser) laser; - - return box[eLaser.displayStage / 10]; - } - - @Override - protected void iterate(EntityLaser laser) { - EntityEnergyLaser eLaser = (EntityEnergyLaser) laser; - - eLaser.displayStage = eLaser.displayStage + 1; - if (eLaser.displayStage >= box.length * 10) { - eLaser.displayStage = 0; - } - } } diff --git a/common/buildcraft/core/render/RenderFrame.java b/common/buildcraft/core/render/RenderFrame.java index f72afdbb..353f3040 100755 --- a/common/buildcraft/core/render/RenderFrame.java +++ b/common/buildcraft/core/render/RenderFrame.java @@ -2,8 +2,6 @@ package buildcraft.core.render; import buildcraft.core.EntityFrame; import buildcraft.core.LaserData; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -12,16 +10,8 @@ import org.lwjgl.opengl.GL11; public class RenderFrame extends Render { - protected ModelBase model = new ModelBase() { - }; - private ModelRenderer laserBox; - public RenderFrame() { - laserBox = new ModelRenderer(model, 0, 0); - laserBox.addBox(0, -0.5F, -0.5F, 16, 1, 1); - laserBox.rotationPointX = 0; - laserBox.rotationPointY = 0; - laserBox.rotationPointZ = 0; + } @Override @@ -37,7 +27,7 @@ public class RenderFrame extends Render { for (LaserData l : frame.lasers) { GL11.glPushMatrix(); GL11.glTranslated(l.head.x - frame.posX, l.head.y - frame.posY, l.head.z - frame.posZ); - RenderLaser.doRenderLaser(renderManager, laserBox, l, frame.getTexture()); + RenderLaser.doRenderLaser(renderManager.renderEngine, l, frame.getTexture()); GL11.glPopMatrix(); } diff --git a/common/buildcraft/core/render/RenderLaser.java b/common/buildcraft/core/render/RenderLaser.java index d09dc58a..c5e9242a 100644 --- a/common/buildcraft/core/render/RenderLaser.java +++ b/common/buildcraft/core/render/RenderLaser.java @@ -1,12 +1,16 @@ package buildcraft.core.render; +import java.util.Date; + import buildcraft.api.core.Position; import buildcraft.core.EntityLaser; import buildcraft.core.LaserData; +import buildcraft.core.render.RenderEntityBlock.RenderInfo; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -14,16 +18,69 @@ import org.lwjgl.opengl.GL11; public class RenderLaser extends Render { - protected ModelBase model = new ModelBase() { + public static final float STEP = 0.04F; + + protected static ModelBase model = new ModelBase() { }; - private ModelRenderer box; + private static ModelRenderer [] box; + + private static int [][] scaledBoxes; public RenderLaser() { - box = new ModelRenderer(model, 0, 0); - box.addBox(0, -0.5F, -0.5F, 16, 1, 1); - box.rotationPointX = 0; - box.rotationPointY = 0; - box.rotationPointZ = 0; + } + + private static ModelRenderer getBox(int index) { + if (box == null) { + box = new ModelRenderer[40]; + + for (int j = 0; j < box.length; ++j) { + box[j] = new ModelRenderer(model, box.length - j, 0); + box[j].addBox(0, -0.5F, -0.5F, 16, 1, 1); + box[j].rotationPointX = 0; + box[j].rotationPointY = 0; + box[j].rotationPointZ = 0; + } + } + + return box [index]; + } + + private static void initScaledBoxes () { + if (scaledBoxes == null) { + scaledBoxes = new int [100][20]; + + for (int size = 0; size < 100; ++size) { + for (int i = 0; i < 20; ++i) { + scaledBoxes[size][i] = GLAllocation.generateDisplayLists(1); + GL11.glNewList(scaledBoxes[size][i], GL11.GL_COMPILE); + + RenderInfo block = new RenderInfo(); + + float minSize = 0.2F * (float) size / 100F; + float maxSize = 0.4F * (float) size / 100F; + //float minSize = 0.1F; + //float maxSize = 0.2F; + + float range = maxSize - minSize; + + float diff = (float) (Math.cos(i / 20F * 2 * Math.PI) + * range / 2F); + + block.minX = 0.0; + block.minY = -maxSize / 2F + diff; + block.minZ = -maxSize / 2F + diff; + + block.maxX = STEP; + block.maxY = maxSize / 2F - diff; + block.maxZ = maxSize / 2F - diff; + + RenderEntityBlock.INSTANCE.renderBlock(block, null, 0, 0, + 0, false, true); + + GL11.glEndList(); + } + } + } } @Override @@ -44,47 +101,101 @@ public class RenderLaser extends Render { Position offset = laser.renderOffset(); GL11.glTranslated(x + offset.x, y + offset.y, z + offset.z); - doRenderLaser(renderManager, getBox(laser), laser.data, laser.getTexture()); - - iterate(laser); + // FIXME: WARNING! not using getBox (laser) will kill laser movement. + // we can use some other method for the animation though. + doRenderLaser(renderManager.renderEngine, laser.data, laser.getTexture()); GL11.glPopAttrib(); GL11.glPopMatrix(); } - - public static void doRenderLaser(RenderManager renderManager, ModelRenderer box, LaserData laser, ResourceLocation texture) { - if (!laser.isVisible || texture == null) + public static void doRenderLaserWave(TextureManager textureManager, LaserData laser, ResourceLocation texture) { + if (!laser.isVisible || texture == null) { return; + } + + GL11.glPushMatrix(); laser.update(); GL11.glRotatef((float) laser.angleZ, 0, 1, 0); GL11.glRotatef((float) laser.angleY, 0, 0, 1); - renderManager.renderEngine.bindTexture(texture); + textureManager.bindTexture(texture); + + float factor = (float) (1.0 / 16.0); + + int indexList = 0; + + initScaledBoxes(); + + double x0 = 0; + double x1 = laser.wavePosition; + double x2 = x1 + scaledBoxes [0].length * STEP; + double x3 = laser.renderSize; + + doRenderLaserLine(x1, laser.laserTexAnimation); + + for (double i = x1; i <= x2 && i <= laser.renderSize; i += STEP) { + GL11.glCallList(scaledBoxes [(int) (laser.waveSize * 99F)][indexList]); + indexList = (indexList + 1) % scaledBoxes [0].length; + GL11.glTranslated(STEP, 0, 0); + } + + if (x2 < x3) { + doRenderLaserLine(x3 - x2, laser.laserTexAnimation); + } + + GL11.glPopMatrix(); + } + + + + public static void doRenderLaser(TextureManager textureManager, LaserData laser, ResourceLocation texture) { + if (!laser.isVisible || texture == null) { + return; + } + + GL11.glPushMatrix(); + + laser.update(); + + GL11.glRotatef((float) laser.angleZ, 0, 1, 0); + GL11.glRotatef((float) laser.angleY, 0, 0, 1); + + textureManager.bindTexture(texture); float factor = (float) (1.0 / 16.0); float lasti = 0; - for (float i = 0; i <= laser.renderSize - 1; ++i) { - box.render(factor); - GL11.glTranslated(1, 0, 0); - lasti = i; + int indexList = (int) ((new Date ().getTime() / 100) % 20); + + initScaledBoxes(); + + doRenderLaserLine (laser.renderSize, laser.laserTexAnimation); + + GL11.glPopMatrix(); + } + + private static void doRenderLaserLine (double len, int texId) { + float lasti = 0; + + if (len - 1 > 0) { + for (float i = 0; i <= len - 1; i += 1) { + getBox(texId).render(1F / 16F); + GL11.glTranslated(1, 0, 0); + lasti = i; + } + lasti++; } - lasti++; + GL11.glPushMatrix(); + GL11.glScalef(((float) len - lasti), 1, 1); + getBox(texId).render(1F / 16F); + GL11.glPopMatrix(); - GL11.glScalef(((float) laser.renderSize - lasti), 1, 1); - box.render(factor); - } - - protected void iterate(EntityLaser laser) { - } - - protected ModelRenderer getBox(EntityLaser laser) { - return box; + GL11.glTranslated((float) (len - lasti), 0, 0); } @Override diff --git a/common/buildcraft/core/render/RenderRobot.java b/common/buildcraft/core/render/RenderRobot.java index 299b46d1..93efd2f6 100644 --- a/common/buildcraft/core/render/RenderRobot.java +++ b/common/buildcraft/core/render/RenderRobot.java @@ -17,7 +17,6 @@ public class RenderRobot extends Render { protected ModelBase model = new ModelBase() { }; private ModelRenderer box; - private ModelRenderer laserBox; public RenderRobot() { box = new ModelRenderer(model, 0, 0); @@ -25,12 +24,6 @@ public class RenderRobot extends Render { box.rotationPointX = 0; box.rotationPointY = 0; box.rotationPointZ = 0; - - laserBox = new ModelRenderer(model, 0, 0); - laserBox.addBox(0, -0.5F, -0.5F, 16, 1, 1); - laserBox.rotationPointX = 0; - laserBox.rotationPointY = 0; - laserBox.rotationPointZ = 0; } @Override @@ -54,7 +47,7 @@ public class RenderRobot extends Render { robot.laser.head.y = robot.posY; robot.laser.head.z = robot.posZ; - RenderLaser.doRenderLaser(renderManager, laserBox, robot.laser, EntityLaser.LASER_TEXTURES [1]); + RenderLaser.doRenderLaser(renderManager.renderEngine, robot.laser, EntityLaser.LASER_TEXTURES [1]); } GL11.glEnable(2896 /* GL_LIGHTING */); diff --git a/common/buildcraft/energy/BlockBuildcraftFluid.java b/common/buildcraft/energy/BlockBuildcraftFluid.java index b2fe7b3b..cca5a974 100644 --- a/common/buildcraft/energy/BlockBuildcraftFluid.java +++ b/common/buildcraft/energy/BlockBuildcraftFluid.java @@ -1,7 +1,7 @@ /* * Copyright (c) SpaceToad, 2011-2012 * http://www.mod-buildcraft.com - * + * * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt diff --git a/common/buildcraft/energy/BlockEnergyEmitter.java b/common/buildcraft/energy/BlockEnergyEmitter.java new file mode 100755 index 00000000..d2f0f6fd --- /dev/null +++ b/common/buildcraft/energy/BlockEnergyEmitter.java @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.energy; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; +import buildcraft.core.BlockBuildCraft; +import buildcraft.core.CreativeTabBuildCraft; + +public class BlockEnergyEmitter extends BlockBuildCraft { + + public BlockEnergyEmitter(int id) { + super(id, Material.glass); + + setCreativeTab(CreativeTabBuildCraft.MACHINES.get()); + } + + @Override + public TileEntity createNewTileEntity(World world) { + return new TileEnergyEmitter(); + } + + @Override + public int getLightValue(IBlockAccess world, int x, int y, int z) { + return 1; + } + + //@Override + //public boolean isOpaqueCube() { + // return false; + //} + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isACube() { + return false; + } + + + //@Override + //public int getRenderType() { + // return BuildCraftCore.blockByEntityModel; + //} + + @Override + public boolean isBlockSolidOnSide(World world, int x, int y, int z, ForgeDirection side) { + return false; + } + +} diff --git a/common/buildcraft/energy/BlockEnergyReceiver.java b/common/buildcraft/energy/BlockEnergyReceiver.java new file mode 100755 index 00000000..11e3a28f --- /dev/null +++ b/common/buildcraft/energy/BlockEnergyReceiver.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.energy; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import buildcraft.core.BlockBuildCraft; +import buildcraft.core.CreativeTabBuildCraft; + +public class BlockEnergyReceiver extends BlockBuildCraft { + + public BlockEnergyReceiver(int id) { + super(id, Material.iron); + + setCreativeTab(CreativeTabBuildCraft.MACHINES.get()); + } + + @Override + public TileEntity createNewTileEntity(World world) { + return new TileEnergyReceiver(); + + } + + /*@Override + public boolean isOpaqueCube() { + return false; + } + + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + + @Override + public int getRenderType() { + return BuildCraftCore.blockByEntityModel; + }*/ + +} diff --git a/common/buildcraft/energy/BlockEngine.java b/common/buildcraft/energy/BlockEngine.java index 7953ac46..4e702925 100644 --- a/common/buildcraft/energy/BlockEngine.java +++ b/common/buildcraft/energy/BlockEngine.java @@ -127,8 +127,9 @@ public class BlockEngine extends BlockBuildCraft { public void randomDisplayTick(World world, int i, int j, int k, Random random) { TileEngine tile = (TileEngine) world.getBlockTileEntity(i, j, k); - if (!tile.isBurning()) + if (!tile.isBurning()) { return; + } float f = (float) i + 0.5F; float f1 = (float) j + 0.0F + (random.nextFloat() * 6F) / 16F; diff --git a/common/buildcraft/energy/EnergyProxyClient.java b/common/buildcraft/energy/EnergyProxyClient.java index 447dcc9b..b33e5066 100644 --- a/common/buildcraft/energy/EnergyProxyClient.java +++ b/common/buildcraft/energy/EnergyProxyClient.java @@ -3,6 +3,7 @@ package buildcraft.energy; import buildcraft.BuildCraftEnergy; import buildcraft.core.render.RenderingEntityBlocks; import buildcraft.core.render.RenderingEntityBlocks.EntityRenderIndex; +import buildcraft.energy.render.RenderEnergyEmitter; import buildcraft.energy.render.RenderEngine; import cpw.mods.fml.client.registry.ClientRegistry; @@ -12,10 +13,12 @@ public class EnergyProxyClient extends EnergyProxy { public void registerTileEntities() { super.registerTileEntities(); ClientRegistry.bindTileEntitySpecialRenderer(TileEngine.class, new RenderEngine()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEnergyEmitter.class, new RenderEnergyEmitter()); } @Override public void registerBlockRenderers() { + //RenderingEntityBlocks.blockByEntityRenders.put(new EntityRenderIndex(BuildCraftEnergy.emitterBlock, 0), new RenderEnergyEmitter()); RenderingEntityBlocks.blockByEntityRenders.put(new EntityRenderIndex(BuildCraftEnergy.engineBlock, 0), new RenderEngine(TileEngine.WOOD_TEXTURE)); RenderingEntityBlocks.blockByEntityRenders.put(new EntityRenderIndex(BuildCraftEnergy.engineBlock, 1), new RenderEngine(TileEngine.STONE_TEXTURE)); RenderingEntityBlocks.blockByEntityRenders.put(new EntityRenderIndex(BuildCraftEnergy.engineBlock, 2), new RenderEngine(TileEngine.IRON_TEXTURE)); diff --git a/common/buildcraft/energy/TileEnergyEmitter.java b/common/buildcraft/energy/TileEnergyEmitter.java new file mode 100755 index 00000000..e58be9fb --- /dev/null +++ b/common/buildcraft/energy/TileEnergyEmitter.java @@ -0,0 +1,251 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.energy; + +import java.util.Map; +import java.util.TreeMap; + +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import buildcraft.api.core.SafeTimeTracker; +import buildcraft.core.BlockIndex; +import buildcraft.core.LaserData; +import buildcraft.core.TileBuildCraft; +import buildcraft.core.network.RPC; +import buildcraft.core.network.RPCHandler; +import buildcraft.core.network.RPCMessageInfo; +import buildcraft.core.network.RPCSide; +import buildcraft.core.proxy.CoreProxy; + +public class TileEnergyEmitter extends TileBuildCraft { + + /** + * TODO: Try to use these instead of IPowerReceptor + */ + public float _MJ_STORED = 0; + /* + public static final float __MJ_POWER_MAX = 1024; + public static final boolean __MJ_RECEIVE_PNEUMATIC = true; + public static final boolean __MJ_RECEIVE_LASER = false; + */ + + public float mjAcc = 0; + public int accumulated = 0; + + private SafeTimeTracker syncMJ = new SafeTimeTracker(20, 5); + private SafeTimeTracker scanTracker = new SafeTimeTracker(100, 10); + + public static class Target { + public LaserData data = new LaserData(); + TileEnergyReceiver receiver; + } + + public Map targets = new TreeMap (); + + public TileEnergyEmitter () { + + } + + @Override + public void initialize () { + super.initialize(); + + if (CoreProxy.proxy.isRenderWorld(worldObj)) { + RPCHandler.rpcServer(this, "requestLasers"); + } + } + + @Override + public void updateEntity() { + super.updateEntity(); + + if (CoreProxy.proxy.isRenderWorld(worldObj)) { + for (Target t : targets.values()) { + if (t.data.isVisible) { + t.data.update(); + t.data.wavePosition += 0.2F; + + if (t.data.wavePosition > t.data.renderSize) { + t.data.wavePosition = 0; + t.data.waveSize = (_MJ_STORED / targets.size() / 10F); + + if (t.data.waveSize > 1) { + t.data.waveSize = 1F; + } + } + + t.data.iterateTexture(); + } + } + + return; + } + + if (scanTracker.markTimeIfDelay(worldObj)) { + for (TileEnergyReceiver receiver : TileEnergyReceiver.knownReceivers) { + float dx = xCoord - receiver.xCoord; + float dy = yCoord - receiver.yCoord; + float dz = zCoord - receiver.zCoord; + + if (dx * dx + dy * dy + dz * dz < 100 * 100) { + BlockIndex index = new BlockIndex(receiver.xCoord, receiver.yCoord, receiver.zCoord); + + if (!targets.containsKey(index)) { + addLaser(receiver.xCoord, receiver.yCoord, + receiver.zCoord); + + RPCHandler.rpcBroadcastPlayers(this, "addLaser", + receiver.xCoord, receiver.yCoord, + receiver.zCoord); + + targets.get(index).receiver = receiver; + } + } + } + } + + // synchronize regularly with the client an average of the energy in + // the emitter + + mjAcc += _MJ_STORED; + accumulated++; + + if (syncMJ.markTimeIfDelay(worldObj)) { + RPCHandler.rpcBroadcastPlayers(this, "synchronizeMJ", mjAcc + / (float) accumulated); + mjAcc = 0; + accumulated = 0; + } + + if (_MJ_STORED == 0) { + for (Target t : targets.values()) { + if (t.data.isVisible) { + t.data.isVisible = false; + RPCHandler.rpcBroadcastPlayers(this, "disableLaser", + t.receiver.xCoord, t.receiver.yCoord, + t.receiver.zCoord); + } + } + } else { + float perTargetEnergy = 10; + + if (_MJ_STORED > targets.size() * 10) { + _MJ_STORED -= targets.size() * 10; + } else { + perTargetEnergy = _MJ_STORED / targets.size(); + _MJ_STORED = 0; + } + + for (Target t : targets.values()) { + if (!t.data.isVisible) { + t.data.isVisible = true; + RPCHandler.rpcBroadcastPlayers(this, "enableLaser", + t.receiver.xCoord, t.receiver.yCoord, + t.receiver.zCoord); + } + } + + for (Target t : targets.values()) { + t.receiver.energyStored += perTargetEnergy; + } + } + } + + @RPC (RPCSide.CLIENT) + public void synchronizeMJ (float val) { + _MJ_STORED = val; + } + + @RPC (RPCSide.CLIENT) + public void addLaser (int x, int y, int z) { + BlockIndex index = new BlockIndex(x, y, z); + + if (!targets.containsKey(index)) { + Target t = new Target(); + + t.data.head.x = xCoord + 0.5F; + t.data.head.y = yCoord + 0.5F; + t.data.head.z = zCoord + 0.5F; + + t.data.tail.x = x + 0.5F; + t.data.tail.y = y + 0.5F; + t.data.tail.z = z + 0.5F; + + targets.put(index, t); + } + } + + @RPC (RPCSide.CLIENT) + public void enableLaser (int x, int y, int z) { + BlockIndex index = new BlockIndex(x, y, z); + + if (targets.containsKey(index)) { + targets.get(index).data.isVisible = true; + } + } + + @RPC (RPCSide.CLIENT) + public void disableLaser (int x, int y, int z) { + BlockIndex index = new BlockIndex(x, y, z); + + if (targets.containsKey(index)) { + targets.get(index).data.isVisible = false; + } + } + + @RPC (RPCSide.SERVER) + public void requestLasers (RPCMessageInfo info) { + for (BlockIndex b : targets.keySet()) { + RPCHandler.rpcPlayer(this, "addLaser", info.sender, b.x, b.y, b.z); + } + } + + @Override + public World getWorld() { + return worldObj; + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + double xMin = xCoord; + double yMin = yCoord; + double zMin = zCoord; + double xMax = xCoord + 1.0; + double yMax = yCoord + 1.0; + double zMax = zCoord + 1.0; + + for (Target t : targets.values()) { + if (t.data.tail.x < xMin) { + xMin = t.data.tail.x; + } + + if (t.data.tail.y < yMin) { + yMin = t.data.tail.y; + } + + if (t.data.tail.z < zMin) { + zMin = t.data.tail.z; + } + + if (t.data.tail.x > xMax) { + xMax = t.data.tail.x; + } + + if (t.data.tail.y > yMax) { + yMax = t.data.tail.y; + } + + if (t.data.tail.z > zMax) { + zMax = t.data.tail.z; + } + } + + return AxisAlignedBB.getBoundingBox(xMin, yMin, zMin, xMax, yMax, zMax); + } +} diff --git a/common/buildcraft/energy/TileEnergyReceiver.java b/common/buildcraft/energy/TileEnergyReceiver.java new file mode 100755 index 00000000..59d05ae8 --- /dev/null +++ b/common/buildcraft/energy/TileEnergyReceiver.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.energy; + +import java.util.LinkedList; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import buildcraft.api.power.IPowerReceptor; +import buildcraft.api.power.PowerHandler; +import buildcraft.api.power.PowerHandler.PowerReceiver; +import buildcraft.api.transport.IPipeConnection; +import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.core.TileBuffer; +import buildcraft.core.TileBuildCraft; + +public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnection { + public float energyStored = 0;; + + private TileBuffer[] tileCache; + + public static LinkedList knownReceivers = new LinkedList(); + + public TileEnergyReceiver () { + knownReceivers.add(this); + } + + @Override + public void invalidate() { + knownReceivers.remove(this); + } + + public TileBuffer getTileBuffer(ForgeDirection side) { + if (tileCache == null) { + tileCache = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false); + } + + return tileCache[side.ordinal()]; + } + + public boolean isPoweredTile(TileEntity tile, ForgeDirection side) { + if (tile instanceof IPowerReceptor) { + return ((IPowerReceptor) tile).getPowerReceiver(side.getOpposite()) != null; + } + + return false; + } + + private void sendPower() { + for (ForgeDirection s : ForgeDirection.VALID_DIRECTIONS) { + TileEntity tile = getTileBuffer(s).getTile(); + + if (tile instanceof IPowerReceptor) { + PowerReceiver receptor = ((IPowerReceptor) tile) + .getPowerReceiver(s.getOpposite()); + + if (receptor != null) { + receptor.receiveEnergy(PowerHandler.Type.ENGINE, energyStored, + s.getOpposite()); + + energyStored = 0; + } + } + } + + } + + @Override + public ConnectOverride overridePipeConnection(PipeType type, + ForgeDirection with) { + return type == PipeType.POWER ? ConnectOverride.CONNECT : ConnectOverride.DISCONNECT; + } + + @Override + public void updateEntity () { + sendPower (); + } + +} diff --git a/common/buildcraft/energy/render/RenderEnergyEmitter.java b/common/buildcraft/energy/render/RenderEnergyEmitter.java new file mode 100755 index 00000000..a0ba9c68 --- /dev/null +++ b/common/buildcraft/energy/render/RenderEnergyEmitter.java @@ -0,0 +1,102 @@ +/** + * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public License + * 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.energy.render; + +import org.lwjgl.opengl.GL11; + +import buildcraft.BuildCraftCore; +import buildcraft.BuildCraftCore.RenderMode; +import buildcraft.core.DefaultProps; +import buildcraft.core.EntityLaser; +import buildcraft.core.render.RenderLaser; +import buildcraft.energy.TileEnergyEmitter; +import buildcraft.energy.TileEnergyEmitter.Target; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +public class RenderEnergyEmitter extends TileEntitySpecialRenderer { + + private ModelBase model = new ModelBase() { + }; + private ModelRenderer box; + + private static final ResourceLocation CHAMBER_TEXTURE = new ResourceLocation(DefaultProps.TEXTURE_PATH_BLOCKS + "/chamber2.png"); + + public RenderEnergyEmitter() { + box = new ModelRenderer(model, 0, 1); + box.addBox(-8F, -8F, -8F, 16, 4, 16); + box.rotationPointX = 8; + box.rotationPointY = 8; + box.rotationPointZ = 8; + } + + public void renderTileEntityAt2(TileEntity tileentity, double x, double y, double z, float f) { + + if (BuildCraftCore.render == RenderMode.NoDynamic) { + return; + } + + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glColor3f(1, 1, 1); + + GL11.glTranslatef((float) x, (float) y, (float) z); + + float step; + + float[] angle = { 0, 0, 0 }; + + box.rotateAngleX = angle[0]; + box.rotateAngleY = angle[1]; + box.rotateAngleZ = angle[2]; + + + float factor = (float) (1.0 / 16.0); + + //bindTexture(EntityLaser.LASER_TEXTURES[3]); + bindTexture(CHAMBER_TEXTURE); + + box.render(factor); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { + TileEnergyEmitter emitter = ((TileEnergyEmitter) tileentity); + + if (emitter != null) { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + GL11.glTranslated(x, y, z); + + for (Target t : emitter.targets.values()) { + GL11.glPushMatrix(); + GL11.glTranslated(0.5F, 0.5F, 0.5F); + RenderLaser.doRenderLaserWave(tileEntityRenderer.renderEngine, + t.data, EntityLaser.LASER_TEXTURES[3]); + GL11.glPopMatrix(); + } + + //GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + } +} diff --git a/common/buildcraft/transport/PipeIconProvider.java b/common/buildcraft/transport/PipeIconProvider.java index 40f951fd..62516953 100644 --- a/common/buildcraft/transport/PipeIconProvider.java +++ b/common/buildcraft/transport/PipeIconProvider.java @@ -103,6 +103,16 @@ public class PipeIconProvider implements IIconProvider { PipePowerIronM64("pipePowerIronM64"), PipePowerIronM128("pipePowerIronM128"), // + PipePowerHeat0("pipePowerHeat0"), + PipePowerHeat1("pipePowerHeat1"), + PipePowerHeat2("pipePowerHeat2"), + PipePowerHeat3("pipePowerHeat3"), + PipePowerHeat4("pipePowerHeat4"), + PipePowerHeat5("pipePowerHeat5"), + PipePowerHeat6("pipePowerHeat6"), + PipePowerHeat7("pipePowerHeat7"), + PipePowerHeat8("pipePowerHeat8"), + // Power_Normal("texture_cyan"), Power_Overload("texture_red_lit"), Stripes("pipeStripes"), diff --git a/common/buildcraft/transport/PipeTransportPower.java b/common/buildcraft/transport/PipeTransportPower.java index 9e924c2b..4c52e4bf 100644 --- a/common/buildcraft/transport/PipeTransportPower.java +++ b/common/buildcraft/transport/PipeTransportPower.java @@ -7,6 +7,7 @@ */ package buildcraft.transport; +import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -23,11 +24,13 @@ import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.Type; import buildcraft.api.transport.IPipeTile.PipeType; import buildcraft.core.DefaultProps; +import buildcraft.core.ReflectAPI; import buildcraft.core.proxy.CoreProxy; import buildcraft.transport.network.PacketPowerUpdate; import buildcraft.transport.pipes.PipePowerCobblestone; import buildcraft.transport.pipes.PipePowerDiamond; import buildcraft.transport.pipes.PipePowerGold; +import buildcraft.transport.pipes.PipePowerHeat; import buildcraft.transport.pipes.PipePowerIron; import buildcraft.transport.pipes.PipePowerQuartz; import buildcraft.transport.pipes.PipePowerStone; @@ -48,6 +51,7 @@ public class PipeTransportPower extends PipeTransport { powerCapacities.put(PipePowerIron.class, 128); powerCapacities.put(PipePowerGold.class, 256); powerCapacities.put(PipePowerDiamond.class, 1024); + powerCapacities.put(PipePowerHeat.class, 1024); } private boolean needsInit = true; private TileEntity[] tiles = new TileEntity[6]; @@ -64,10 +68,16 @@ public class PipeTransportPower extends PipeTransport { private double highestPower; SafeTimeTracker tracker = new SafeTimeTracker(); + public float[] movementStage = new float [] {0, 0, 0}; + public PipeTransportPower() { for (int i = 0; i < 6; ++i) { powerQuery[i] = 0; } + + for (int i = 0; i < 3; ++i) { + movementStage[i] = (float) Math.random(); + } } @Override @@ -101,6 +111,10 @@ public class PipeTransportPower extends PipeTransport { return true; } + if (ReflectAPI.get_MJ_STORED(tile.getClass()) != null) { + return true; + } + return false; } @@ -133,8 +147,16 @@ public class PipeTransportPower extends PipeTransport { @Override public void updateEntity() { - if (CoreProxy.proxy.isRenderWorld(container.worldObj)) + if (CoreProxy.proxy.isRenderWorld(container.worldObj)) { + // updating movement stage. We're only carrying the movement on half + // the things. This is purely for animation purpose. + + for (int i = 0; i < 6; i += 2) { + movementStage [i / 2] = (movementStage [i / 2] + 0.01F) % 1.0F; + } + return; + } step(); @@ -151,7 +173,10 @@ public class PipeTransportPower extends PipeTransport { for (int j = 0; j < 6; ++j) { if (j != i && powerQuery[j] > 0) - if (tiles[j] instanceof TileGenericPipe || tiles[j] instanceof IPowerReceptor) { + if (tiles[j] != null + && (tiles[j] instanceof TileGenericPipe + || tiles[j] instanceof IPowerReceptor || ReflectAPI + .get_MJ_STORED(tiles[j].getClass()) != null)) { totalPowerQuery += powerQuery[j]; } } @@ -173,6 +198,29 @@ public class PipeTransportPower extends PipeTransport { watts = nearbyTransport.receiveEnergy(ForgeDirection.VALID_DIRECTIONS[j].getOpposite(), watts); internalPower[i] -= watts; + } else if (tiles[j] != null) { + // Look for the simplified power framework + + Field f = ReflectAPI.get_MJ_STORED(tiles [j].getClass()); + try { + if (f != null) { + watts = (internalPower[i] / totalPowerQuery) * powerQuery[j]; + + float energy = f.getFloat(tiles[j]); + + if (energy < 100) { + energy += watts; + f.setFloat(tiles [j], energy); + internalPower[i] -= watts; + } + } + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } displayPower[j] += watts; @@ -200,13 +248,35 @@ public class PipeTransportPower extends PipeTransport { // Compute the tiles requesting energy that are not power pipes - for (int i = 0; i < 6; ++i) { - PowerReceiver prov = getReceiverOnSide(ForgeDirection.VALID_DIRECTIONS[i]); + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + TileEntity tile = tiles [dir.ordinal()]; + + PowerReceiver prov = getReceiverOnSide(dir); if (prov != null) { float request = (float) prov.powerRequest(); if (request > 0) { - requestEnergy(ForgeDirection.VALID_DIRECTIONS[i], request); + requestEnergy(dir, request); + } + } + + if (tile != null) { + Field f = ReflectAPI.get_MJ_STORED(tile.getClass()); + + try { + if (f != null) { + float energy = f.getFloat(tile); + + if (energy < 100) { + requestEnergy(dir, 100); + } + } + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } } @@ -260,7 +330,6 @@ public class PipeTransportPower extends PipeTransport { packet.overload = isOverloaded(); CoreProxy.proxy.sendToPlayers(packet.getPacket(), container.worldObj, container.xCoord, container.yCoord, container.zCoord, DefaultProps.PIPE_CONTENTS_RENDER_DIST); } - } private PowerReceiver getReceiverOnSide(ForgeDirection side) { @@ -333,6 +402,7 @@ public class PipeTransportPower extends PipeTransport { public void requestEnergy(ForgeDirection from, float amount) { step(); + if (this.container.pipe instanceof IPipeTransportPowerHook) { nextPowerQuery[from.ordinal()] += ((IPipeTransportPowerHook) this.container.pipe).requestEnergy(from, amount); } else { @@ -397,7 +467,7 @@ public class PipeTransportPower extends PipeTransport { /** * This can be use to provide a rough estimate of how much power is * contained in a pipe. Measured in MJ. - * + * * Max should be around (throughput * internalPower.length * 2), ie 112 MJ for a Cobblestone Pipe. * * @return MJ @@ -412,4 +482,24 @@ public class PipeTransportPower extends PipeTransport { } return amount; } + + public float getPistonStage (int i) { + if (movementStage [i] < 0.5F) { + return movementStage [i] * 2; + } else { + return 1 - (movementStage [i] - 0.5F) * 2; + } + } + + public double clearInstantPower () { + double amount = 0.0; + + for (int i = 0; i < internalPower.length; ++i) { + amount += internalPower [i]; + internalPower [i] = 0; + } + + return amount; + + } } diff --git a/common/buildcraft/transport/TileGenericPipe.java b/common/buildcraft/transport/TileGenericPipe.java index 465dd18b..169fb161 100644 --- a/common/buildcraft/transport/TileGenericPipe.java +++ b/common/buildcraft/transport/TileGenericPipe.java @@ -8,6 +8,7 @@ package buildcraft.transport; import buildcraft.api.transport.PipeWire; + import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -31,7 +32,6 @@ import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; import buildcraft.api.core.Position; import buildcraft.api.core.SafeTimeTracker; -import buildcraft.api.gates.GateExpansionController; import buildcraft.api.gates.GateExpansions; import buildcraft.api.gates.IGateExpansion; import buildcraft.api.gates.IOverrideDefaultTriggers; @@ -55,8 +55,10 @@ import buildcraft.transport.gates.GateDefinition; import buildcraft.transport.gates.GateFactory; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; + import java.util.HashSet; import java.util.Set; + import net.minecraft.server.management.PlayerInstance; import net.minecraft.world.WorldServer; diff --git a/common/buildcraft/transport/TransportProxyClient.java b/common/buildcraft/transport/TransportProxyClient.java index deacb153..da023950 100644 --- a/common/buildcraft/transport/TransportProxyClient.java +++ b/common/buildcraft/transport/TransportProxyClient.java @@ -58,6 +58,7 @@ public class TransportProxyClient extends TransportProxy { MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipePowerIron.itemID, pipeItemRenderer); MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipePowerGold.itemID, pipeItemRenderer); MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipePowerDiamond.itemID, pipeItemRenderer); + MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipePowerHeat.itemID, pipeItemRenderer); MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipeStructureCobblestone.itemID, pipeItemRenderer); // MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipeItemsStipes.shiftedIndex, pipeItemRenderer); MinecraftForgeClient.registerItemRenderer(BuildCraftTransport.pipeItemsVoid.itemID, pipeItemRenderer); diff --git a/common/buildcraft/transport/pipes/PipePowerHeat.java b/common/buildcraft/transport/pipes/PipePowerHeat.java new file mode 100755 index 00000000..d4ab4e36 --- /dev/null +++ b/common/buildcraft/transport/pipes/PipePowerHeat.java @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.transport.pipes; + +import buildcraft.BuildCraftCore; +import buildcraft.BuildCraftTransport; +import buildcraft.api.core.IIconProvider; +import buildcraft.api.core.SafeTimeTracker; +import buildcraft.core.proxy.CoreProxy; +import buildcraft.transport.Pipe; +import buildcraft.transport.PipeIconProvider; +import buildcraft.transport.PipeTransportPower; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.ForgeDirection; + +public class PipePowerHeat extends Pipe { + + int zeroAcc = 0; + double powerLevel = 0; + + SafeTimeTracker scanTracker = new SafeTimeTracker(40, 5); + + public PipePowerHeat(int itemID) { + super(new PipeTransportPower(), itemID); + transport.initFromPipe(getClass()); + } + + @Override + @SideOnly(Side.CLIENT) + public IIconProvider getIconProvider() { + return BuildCraftTransport.instance.pipeIconProvider; + } + + public int getHeatLevel () { + if (powerLevel == 0) { + return 0; + } else if (powerLevel >= 1000) { + return 8; + } else { + return 1 + (int) (powerLevel / 1000F * 7F); + } + } + + @Override + public int getIconIndex(ForgeDirection direction) { + if (container == null) { + return PipeIconProvider.TYPE.PipePowerHeat0.ordinal(); + } else { + return PipeIconProvider.TYPE.PipePowerHeat0.ordinal() + + container.worldObj.getBlockMetadata(container.xCoord, + container.yCoord, container.zCoord); + } + } + + @Override + public void updateEntity() { + super.updateEntity(); + + if (!CoreProxy.proxy.isSimulating(container.worldObj)) { + return; + } + + PipeTransportPower power = ((PipeTransportPower) transport); + + power.requestEnergy(ForgeDirection.UP, 1024); + + powerLevel = power.clearInstantPower (); + + int meta = container.worldObj.getBlockMetadata(container.xCoord, container.yCoord, container.zCoord); + int newMeta = getHeatLevel(); + + if (meta != newMeta) { + System.out.println ("SEND NEW META " + newMeta); + container.worldObj.setBlockMetadataWithNotify(container.xCoord, + container.yCoord, container.zCoord, newMeta, 2); + container.scheduleRenderUpdate(); + } + + if (powerLevel >= 10 && scanTracker.markTimeIfDelay(container.worldObj)) { + int x = container.xCoord; + int y = container.yCoord; + int z = container.zCoord; + + for (int xi = x - 1; xi <= x + 1; ++xi) { + for (int yi = y - 1; yi <= y + 1; ++yi) { + for (int zi = z - 1; zi <= z + 1; ++zi) { + if (container.worldObj.getBlockId(xi, yi, zi) == Block.blockRedstone.blockID) { + container.worldObj.setBlock(xi, yi, zi, 0); + + for (int i = 0; i < 4; ++i) { + ItemStack stack = new ItemStack( + BuildCraftCore.redstoneCrystal); + EntityItem entityitem = new EntityItem( + container.worldObj, xi + 0.5F, + yi + 0.5F, zi + 0.5F, stack); + + entityitem.lifespan = BuildCraftCore.itemLifespan; + entityitem.delayBeforeCanPickup = 10; + + float f3 = 0.05F; + entityitem.motionX = (float) (container.worldObj.rand + .nextGaussian() - 0.5F) * f3; + entityitem.motionY = (float) (container.worldObj.rand + .nextGaussian() - 0.5F) * f3; + entityitem.motionZ = (float) (container.worldObj.rand + .nextGaussian() - 0.5F) * f3; + container.worldObj + .spawnEntityInWorld(entityitem); + } + } + + } + } + } + } + } +} diff --git a/common/buildcraft/transport/pipes/PipePowerWood.java b/common/buildcraft/transport/pipes/PipePowerWood.java index f6e804a0..fe2e5c25 100644 --- a/common/buildcraft/transport/pipes/PipePowerWood.java +++ b/common/buildcraft/transport/pipes/PipePowerWood.java @@ -156,7 +156,8 @@ public class PipePowerWood extends Pipe implements IPowerRec public float requestEnergy(ForgeDirection from, float amount) { if (container.getTile(from) instanceof IPipeTile) { return amount; + } else { + return 0; } - return 0; } } diff --git a/common/buildcraft/transport/render/PipeRendererTESR.java b/common/buildcraft/transport/render/PipeRendererTESR.java index 3c4d4df4..9084bbd6 100644 --- a/common/buildcraft/transport/render/PipeRendererTESR.java +++ b/common/buildcraft/transport/render/PipeRendererTESR.java @@ -10,9 +10,9 @@ package buildcraft.transport.render; import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore.RenderMode; import buildcraft.BuildCraftTransport; -import buildcraft.api.gates.GateExpansionController; import buildcraft.api.gates.IGateExpansion; import buildcraft.core.CoreConstants; +import buildcraft.core.DefaultProps; import buildcraft.core.render.RenderEntityBlock; import buildcraft.core.render.RenderEntityBlock.RenderInfo; import buildcraft.core.utils.EnumColor; @@ -27,13 +27,14 @@ import buildcraft.transport.PipeTransportItems; import buildcraft.transport.PipeTransportPower; import buildcraft.transport.TileGenericPipe; import buildcraft.transport.TravelingItem; -import buildcraft.api.transport.PipeWire; import com.google.common.collect.Maps; import java.util.HashMap; import net.minecraft.block.Block; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; @@ -44,7 +45,7 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; -import net.minecraft.util.Timer; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.Fluid; @@ -74,6 +75,10 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { public int[] displayPowerList = new int[POWER_STAGES]; public int[] displayPowerListOverload = new int[POWER_STAGES]; + protected ModelBase model = new ModelBase() { + }; + private ModelRenderer box; + public PipeRendererTESR() { customRenderItem = new RenderItem() { @Override @@ -87,6 +92,13 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { } }; customRenderItem.setRenderManager(RenderManager.instance); + + box = new ModelRenderer(model, 0, 0); + //box.addBox(0, 64 + 1, 64 + 1, 16, 128 - 2, 128 - 2); + box.addBox(0, 4 + 1, 4 + 1, 2, 8 - 2, 8 - 2); + box.rotationPointX = 0; + box.rotationPointY = 0; + box.rotationPointZ = 0; } private DisplayFluidList getDisplayFluidLists(int liquidId, World world) { @@ -254,7 +266,6 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { - if (BuildCraftCore.render == RenderMode.NoDynamic) return; @@ -472,24 +483,24 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { else iconLogic = pipe.pipe.gate.logic.getIconDark(); - float translateCenter = 0; - - // Render base gate + float translateCenter = 0; + + // Render base gate renderGate(pipe, iconLogic, 0, 0.1F, 0, 0); - + float pulseStage = pipe.pipe.gate.getPulseStage() * 2F; - + if (pipe.renderState.isGatePulsing() || pulseStage != 0) { // Render pulsing gate float amplitude = 0.10F; - float start = 0.01F; - + float start = 0.01F; + if (pulseStage < 1) { translateCenter = (pulseStage * amplitude) + start; } else { translateCenter = amplitude - ((pulseStage - 1F) * amplitude) + start; } - + renderGate(pipe, iconLogic, 0, 0.13F, translateCenter, translateCenter); } @@ -499,8 +510,8 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { for (IGateExpansion expansion : pipe.pipe.gate.expansions.keySet()) { renderGate(pipe, expansion.getOverlayBlock(), 2, 0.13F, translateCenter, translateCenter); - } - + } + RenderHelper.enableStandardItemLighting(); GL11.glPopAttrib(); @@ -526,17 +537,17 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { // Z START - END zeroState[2][0] = min; zeroState[2][1] = max; - + for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { if (shouldRenderNormalPipeSide(state, direction)) { GL11.glPushMatrix(); - - float xt = direction.offsetX * translateCenter, - yt = direction.offsetY * translateCenter, + + float xt = direction.offsetX * translateCenter, + yt = direction.offsetY * translateCenter, zt = direction.offsetZ * translateCenter; - - GL11.glTranslatef(xt, yt, zt); - + + GL11.glTranslatef(xt, yt, zt); + float[][] rotated = MatrixTranformations.deepClone(zeroState); MatrixTranformations.transform(rotated, direction); @@ -544,12 +555,12 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { box.setRenderSingleSide(direction.ordinal()); box.setBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]); RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true); - + GL11.glPopMatrix(); } - } + } } - + private boolean shouldRenderNormalPipeSide(PipeRenderState state, ForgeDirection direction) { return !state.pipeConnectionMatrix.isConnected(direction) && state.facadeMatrix.getFacadeBlockId(direction) == 0 && !state.plugMatrix.isConnected(direction) && !isOpenOrientation(state, direction); } @@ -575,6 +586,8 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { return targetOrientation.getOpposite() == direction; } + public static final ResourceLocation STRIPES_TEXTURE = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_ENTITIES + "/stripes.png"); + private void renderPower(Pipe pipe, double x, double y, double z) { initializeDisplayPowerList(pipe.container.worldObj); @@ -613,6 +626,30 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } + /*bindTexture(STRIPES_TEXTURE); + + for (int side = 0; side < 6; side += 2) { + if (pipe.container.isPipeConnected(ForgeDirection.values()[side])) { + GL11.glPushMatrix(); + + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + + GL11.glRotatef(angleY[side], 0, 1, 0); + GL11.glRotatef(angleZ[side], 0, 0, 1); + + float scale = 1.0F - side * 0.0001F; + GL11.glScalef(scale, scale, scale); + + float movement = (0.50F) * pipe.transport.getPistonStage(side / 2); + GL11.glTranslatef(-0.25F - 1F / 16F - movement, -0.5F, -0.5F); + + // float factor = (float) (1.0 / 256.0); + float factor = (float) (1.0 / 16.0); + box.render(factor); + GL11.glPopMatrix(); + } + }*/ + GL11.glPopAttrib(); GL11.glPopMatrix(); }