fix merge

This commit is contained in:
modmuss50 2016-07-19 11:46:53 -07:00
commit 10aa2f2ffb
33 changed files with 507 additions and 859 deletions

View file

@ -39,7 +39,7 @@ public class GuiThermalGenerator extends GuiContainer
String name = I18n.translateToLocal("tile.techreborn.thermalGenerator.name"); String name = I18n.translateToLocal("tile.techreborn.thermalGenerator.name");
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6,
4210752); 4210752);
this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory", new Object[0]), 8, this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory"), 8,
this.ySize - 96 + 2, 4210752); this.ySize - 96 + 2, 4210752);
this.fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255); this.fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255);
this.fontRendererObj.drawString(tile.tank.getFluidAmount() + "", 10, 30, 16448255); this.fontRendererObj.drawString(tile.tank.getFluidAmount() + "", 10, 30, 16448255);

View file

@ -4,12 +4,10 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects; import net.minecraft.init.MobEffects;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
import techreborn.init.ModItems; import techreborn.init.ModItems;
import techreborn.power.PowerTickEvent;
public class TRTickHandler public class TRTickHandler
{ {
@ -32,14 +30,4 @@ public class TRTickHandler
previouslyWearing = chestslot; previouslyWearing = chestslot;
} }
@SubscribeEvent
public void worldTick(TickEvent.WorldTickEvent e)
{
if (e.world.isRemote)
{
return;
}
MinecraftForge.EVENT_BUS.post(new PowerTickEvent());
}
} }

View file

@ -889,10 +889,10 @@ public class ModRecipes
} }
} }
CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("nichromeHeatingCoil"), " N ", "NCN", " N ", 'N', TechRebornAPI.addRollingOreMachinceRecipe(ItemParts.getPartByName("nichromeHeatingCoil"), " N ", "NCN", " N ", 'N',
"ingotNickel", 'C', "ingotChrome"); "ingotNickel", 'C', "ingotChrome");
CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("kanthalHeatingCoil"), "III", "CAA", "AAA", 'I', TechRebornAPI.addRollingOreMachinceRecipe(ItemParts.getPartByName("kanthalHeatingCoil"), "III", "CAA", "AAA", 'I',
"ingotSteel", 'C', "ingotChrome", 'A', "ingotAluminum"); "ingotSteel", 'C', "ingotChrome", 'A', "ingotAluminum");
CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("heliumCoolantSimple"), " T ", "TCT", " T ", 'T', CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("heliumCoolantSimple"), " T ", "TCT", " T ", 'T',
@ -1072,8 +1072,7 @@ public class ModRecipes
.addShapedOreRecipe(new ItemStack(ModBlocks.LesuStorage), "LLL", "LCL", "LLL", 'L', "blockLapis", 'C', .addShapedOreRecipe(new ItemStack(ModBlocks.LesuStorage), "LLL", "LCL", "LLL", 'L', "blockLapis", 'C',
"circuitBasic"); "circuitBasic");
TechRebornAPI TechRebornAPI.addRollingOreMachinceRecipe(ItemParts.getPartByName("cupronickelHeatingCoil"), "NCN", "C C", "NCN",
.addRollingOreMachinceRecipe(ItemParts.getPartByName("cupronickelHeatingCoil"), "NCN", "C C", "NCN",
'N', "ingotCupronickel", 'C', "ingotCopper"); 'N', "ingotCupronickel", 'C', "ingotCopper");
RecipeHandler.addRecipe(new VacuumFreezerRecipe(ItemIngots.getIngotByName("hotTungstensteel"), RecipeHandler.addRecipe(new VacuumFreezerRecipe(ItemIngots.getIngotByName("hotTungstensteel"),
@ -2313,7 +2312,7 @@ public class ModRecipes
getOre("ic2Extractor")); getOre("ic2Extractor"));
CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.BlastFurnace), "CHC", "HBH", "FHF", 'H', CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.BlastFurnace), "CHC", "HBH", "FHF", 'H',
new ItemStack(ModItems.parts, 1, 17), 'C', "circuitAdvanced", 'B', ItemParts.getPartByName("cupronickelHeatingCoil"), 'C', "circuitAdvanced", 'B',
BlockMachineFrame.getFrameByName("advancedMachine", 1), 'F', ModBlocks.ElectricFurnace); BlockMachineFrame.getFrameByName("advancedMachine", 1), 'F', ModBlocks.ElectricFurnace);
CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.IndustrialGrinder), "ECP", "GGG", "CBC", 'E', CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.IndustrialGrinder), "ECP", "GGG", "CBC", 'E',
@ -2346,7 +2345,7 @@ public class ModRecipes
CraftingHelper CraftingHelper
.addShapedOreRecipe(new ItemStack(ModBlocks.RollingMachine), "PCP", "MBM", "PCP", 'P', Blocks.PISTON, .addShapedOreRecipe(new ItemStack(ModBlocks.RollingMachine), "PCP", "MBM", "PCP", 'P', Blocks.PISTON,
'C', "circuitAdvanced", 'M', ModBlocks.Compressor, 'B', 'C', "circuitAdvanced", 'M', ModBlocks.Compressor, 'B',
BlockMachineFrame.getFrameByName("machine", 1)); "machineBlockAdvanced");
// CraftingHelper.addShapedOreRecipe(new // CraftingHelper.addShapedOreRecipe(new
// ItemStack(ModBlocks.ElectricCraftingTable), // ItemStack(ModBlocks.ElectricCraftingTable),

View file

@ -30,8 +30,6 @@ public class TechRebornParts implements ICompatModule
@Nullable @Nullable
public static Item fluidPipe; public static Item fluidPipe;
public static HashMap<EnumCableType, Class<? extends CableMultipart>> multipartHashMap = new HashMap<>();
@Override @Override
public void preInit(FMLPreInitializationEvent event) public void preInit(FMLPreInitializationEvent event)
{ {
@ -39,17 +37,13 @@ public class TechRebornParts implements ICompatModule
} }
@Override @Override
public void init(FMLInitializationEvent event) public void init(FMLInitializationEvent event) {
{
for (EnumCableType cableType : EnumCableType.values())
{
multipartHashMap.put(cableType, cableType.cableClass);
MultipartRegistry.registerPart(cableType.cableClass, "techreborn:cable." + cableType.name());
}
cables = new ItemCables(); cables = new ItemCables();
cables.setRegistryName("cables"); cables.setRegistryName("cables");
GameRegistry.register(cables); GameRegistry.register(cables);
MultipartRegistry.registerPart(CableMultipart.class, "techreborn:cable");
MultipartRegistry.registerPart(EmptyFluidPipe.class, "techreborn:fluidpipe.empty"); MultipartRegistry.registerPart(EmptyFluidPipe.class, "techreborn:fluidpipe.empty");
MultipartRegistry.registerPart(InsertingFluidPipe.class, "techreborn:fluidpipe.inserting"); MultipartRegistry.registerPart(InsertingFluidPipe.class, "techreborn:fluidpipe.inserting");
MultipartRegistry.registerPart(ExtractingFluidPipe.class, "techreborn:fluidpipe.extracting"); MultipartRegistry.registerPart(ExtractingFluidPipe.class, "techreborn:fluidpipe.extracting");

View file

@ -1,9 +1,5 @@
package techreborn.parts.powerCables; package techreborn.parts.powerCables;
import reborncore.mcmultipart.MCMultiPartMod;
import reborncore.mcmultipart.microblock.IMicroblock;
import reborncore.mcmultipart.multipart.*;
import reborncore.mcmultipart.raytrace.PartMOP;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.IProperty;
@ -15,8 +11,13 @@ import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*; import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
@ -29,11 +30,12 @@ import reborncore.api.power.IEnergyInterfaceTile;
import reborncore.common.misc.Functions; import reborncore.common.misc.Functions;
import reborncore.common.misc.vecmath.Vecs3dCube; import reborncore.common.misc.vecmath.Vecs3dCube;
import reborncore.common.util.WorldUtils; import reborncore.common.util.WorldUtils;
import techreborn.config.ConfigTechReborn; import reborncore.mcmultipart.MCMultiPartMod;
import techreborn.init.ModSounds; import reborncore.mcmultipart.microblock.IMicroblock;
import reborncore.mcmultipart.multipart.*;
import reborncore.mcmultipart.raytrace.PartMOP;
import techreborn.parts.TechRebornParts; import techreborn.parts.TechRebornParts;
import techreborn.parts.walia.IPartWaliaProvider; import techreborn.parts.walia.IPartWaliaProvider;
import techreborn.power.TRPowerNet;
import techreborn.utils.damageSources.ElectrialShockSource; import techreborn.utils.damageSources.ElectrialShockSource;
import java.util.*; import java.util.*;
@ -41,7 +43,7 @@ import java.util.*;
/** /**
* Created by modmuss50 on 02/03/2016. * Created by modmuss50 on 02/03/2016.
*/ */
public abstract class CableMultipart extends Multipart public class CableMultipart extends Multipart
implements INormallyOccludingPart, ISlottedPart, ITickable, ICableType, IPartWaliaProvider { implements INormallyOccludingPart, ISlottedPart, ITickable, ICableType, IPartWaliaProvider {
public static final IUnlistedProperty<Boolean> UP = Properties.toUnlisted(PropertyBool.create("up")); public static final IUnlistedProperty<Boolean> UP = Properties.toUnlisted(PropertyBool.create("up"));
@ -55,10 +57,14 @@ public abstract class CableMultipart extends Multipart
public float center = 0.6F; public float center = 0.6F;
public float offset = 0.10F; public float offset = 0.10F;
public Map<EnumFacing, BlockPos> connectedSides; public Map<EnumFacing, BlockPos> connectedSides;
public int ticks = 0; public double lastEnergyPacket;
public ItemStack stack; public EnumCableType cableType = EnumCableType.ICOPPER;
public TRPowerNet mergeWith = null;
private TRPowerNet network; public CableMultipart(EnumCableType cableType) {
this.cableType = cableType;
connectedSides = new HashMap<>();
refreshBounding();
}
public CableMultipart() { public CableMultipart() {
connectedSides = new HashMap<>(); connectedSides = new HashMap<>();
@ -144,7 +150,6 @@ public abstract class CableMultipart extends Multipart
@Override @Override
public void onRemoved() { public void onRemoved() {
super.onRemoved(); super.onRemoved();
removeFromNetwork();
for (EnumFacing dir : EnumFacing.VALUES) { for (EnumFacing dir : EnumFacing.VALUES) {
CableMultipart multipart = getPartFromWorld(getWorld(), getPos().offset(dir), dir); CableMultipart multipart = getPartFromWorld(getWorld(), getPos().offset(dir), dir);
if (multipart != null) { if (multipart != null) {
@ -153,12 +158,6 @@ public abstract class CableMultipart extends Multipart
} }
} }
@Override
public void onUnloaded() {
super.onUnloaded();
removeFromNetwork();
}
@Override @Override
public void addOcclusionBoxes(List<AxisAlignedBB> list) { public void addOcclusionBoxes(List<AxisAlignedBB> list) {
for (EnumFacing dir : EnumFacing.VALUES) { for (EnumFacing dir : EnumFacing.VALUES) {
@ -172,13 +171,9 @@ public abstract class CableMultipart extends Multipart
public void onNeighborBlockChange(Block block) { public void onNeighborBlockChange(Block block) {
super.onNeighborBlockChange(block); super.onNeighborBlockChange(block);
nearByChange(); nearByChange();
} }
public void nearByChange() { public void nearByChange() {
if (network == null) {
findAndJoinNetwork(getWorld(), getPos());
}
checkConnectedSides(); checkConnectedSides();
for (EnumFacing direction : EnumFacing.VALUES) { for (EnumFacing direction : EnumFacing.VALUES) {
BlockPos blockPos = getPos().offset(direction); BlockPos blockPos = getPos().offset(direction);
@ -188,7 +183,6 @@ public abstract class CableMultipart extends Multipart
part.checkConnectedSides(); part.checkConnectedSides();
} }
} }
TRPowerNet.buildEndpoint(network);
} }
@Override @Override
@ -258,18 +252,14 @@ public abstract class CableMultipart extends Multipart
@Override @Override
public void update() { public void update() {
if (getWorld() != null) { if (getWorld() != null) {
if(lastEnergyPacket > 0)
--lastEnergyPacket;
if (getWorld().getTotalWorldTime() % 80 == 0) { if (getWorld().getTotalWorldTime() % 80 == 0) {
checkConnectedSides(); checkConnectedSides();
} }
} }
if (network == null) {
this.findAndJoinNetwork(getWorld(), getPos());
} else {
if (mergeWith != null) {
getNetwork().merge(mergeWith);
mergeWith = null;
}
}
} }
@Override @Override
@ -294,7 +284,7 @@ public abstract class CableMultipart extends Multipart
} }
public Material getMaterial() { public Material getMaterial() {
return Material.CLOTH; return getCableType().material;
} }
@Override @Override
@ -307,32 +297,8 @@ public abstract class CableMultipart extends Multipart
@Override @Override
public void onEntityCollided(Entity entity) { public void onEntityCollided(Entity entity) {
if (getCableType().canKill && entity instanceof EntityLivingBase) { if (getCableType().canKill && entity instanceof EntityLivingBase) {
if (network != null) { entity.attackEntityFrom(new ElectrialShockSource(), (float) (lastEnergyPacket / 16F));
if (network.getEnergy() != 0) {
if (ConfigTechReborn.UninsulatedElectocutionDamage) {
if (getCableType() == EnumCableType.HV) {
entity.setFire(1);
} }
network.setEnergy(-1);
entity.attackEntityFrom(new ElectrialShockSource(), 1F);
}
if (ConfigTechReborn.UninsulatedElectocutionSound) {
getWorld().playSound(null, entity.posX, entity.posY,
entity.posZ, ModSounds.shock,
SoundCategory.BLOCKS, 0.6F, 1F);
}
if (ConfigTechReborn.UninsulatedElectocutionParticle) {
getWorld().spawnParticle(EnumParticleTypes.CRIT, entity.posX, entity.posY, entity.posZ, 0,
0, 0);
}
}
}
}
}
@Override
public void onEntityStanding(Entity entity) {
} }
@ -341,63 +307,6 @@ public abstract class CableMultipart extends Multipart
return new ItemStack(TechRebornParts.cables, 1, getCableType().ordinal()); return new ItemStack(TechRebornParts.cables, 1, getCableType().ordinal());
} }
public final void findAndJoinNetwork(World world, BlockPos pos) {
for (EnumFacing dir : EnumFacing.VALUES) {
CableMultipart cableMultipart = getPartFromWorld(getWorld(), getPos().offset(dir), dir);
if (cableMultipart != null && cableMultipart.getCableType() == getCableType()) {
TRPowerNet net = cableMultipart.getNetwork();
if (net != null) {
network = net;
network.addElement(this);
break;
}
}
}
if (network == null) {
network = new TRPowerNet(getCableType());
network.addElement(this);
}
network.endpoints.clear();
for (EnumFacing dir : EnumFacing.VALUES) {
TileEntity te = getNeighbourTile(dir);
if (te != null && te instanceof IEnergyInterfaceTile) {
network.addConnection((IEnergyInterfaceTile) te, dir.getOpposite());
}
}
}
public final TRPowerNet getNetwork() {
return network;
}
public final void setNetwork(TRPowerNet n) {
if (n == null) {
} else {
network = n;
network.addElement(this);
}
}
public final void removeFromNetwork() {
if (network == null) {
} else
network.removeElement(this);
}
public final void rebuildNetwork() {
this.removeFromNetwork();
this.resetNetwork();
this.findAndJoinNetwork(getWorld(), getPos());
}
public final void resetNetwork() {
if (network != null) {
network.removeElement(this);
}
network = null;
}
@Override @Override
public void addInfo(List<String> info) { public void addInfo(List<String> info) {
info.add(TextFormatting.GREEN + "EU Transfer: " + info.add(TextFormatting.GREEN + "EU Transfer: " +
@ -416,4 +325,35 @@ public abstract class CableMultipart extends Multipart
public boolean canRenderInLayer(BlockRenderLayer layer) { public boolean canRenderInLayer(BlockRenderLayer layer) {
return layer == BlockRenderLayer.CUTOUT; return layer == BlockRenderLayer.CUTOUT;
} }
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
tag.setString("CableType", cableType.name());
return tag;
}
@Override
public void readFromNBT(NBTTagCompound tag) {
if(tag.hasKey("CableType")) {
cableType = EnumCableType.valueOf(tag.getString("CableType"));
}
}
@Override
public void writeUpdatePacket(PacketBuffer buf) {
super.writeUpdatePacket(buf);
buf.writeInt(cableType.ordinal());
}
@Override
public void readUpdatePacket(PacketBuffer buf) {
super.readUpdatePacket(buf);
cableType = EnumCableType.values()[buf.readInt()];
}
@Override
public EnumCableType getCableType() {
return cableType;
}
} }

View file

@ -1,44 +1,37 @@
package techreborn.parts.powerCables; package techreborn.parts.powerCables;
import net.minecraft.block.material.Material;
import net.minecraft.util.IStringSerializable; import net.minecraft.util.IStringSerializable;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import techreborn.parts.powerCables.types.CopperCable;
import techreborn.parts.powerCables.types.GlassFiberCable;
import techreborn.parts.powerCables.types.GoldCable;
import techreborn.parts.powerCables.types.HVCable;
import techreborn.parts.powerCables.types.InsulatedCopperCable;
import techreborn.parts.powerCables.types.InsulatedGoldCable;
import techreborn.parts.powerCables.types.InsulatedHVCable;
import techreborn.parts.powerCables.types.TinCable;
public enum EnumCableType implements IStringSerializable public enum EnumCableType implements IStringSerializable
{ {
COPPER("copper", "techreborn:blocks/cables/copper_cable", 128, 12.0, true, EnumPowerTier.LOW, CopperCable.class), COPPER("copper", "techreborn:blocks/cables/copper_cable", Material.IRON, 128, 12.0, true, EnumPowerTier.LOW),
TIN("tin", "techreborn:blocks/cables/tin_cable", 32, 12.0, true, EnumPowerTier.MEDIUM, TinCable.class), TIN("tin", "techreborn:blocks/cables/tin_cable", Material.IRON, 32, 12.0, true, EnumPowerTier.MEDIUM),
GOLD("gold", "techreborn:blocks/cables/gold_cable", 512, 12.0, true, EnumPowerTier.MEDIUM, GoldCable.class), GOLD("gold", "techreborn:blocks/cables/gold_cable", Material.IRON, 512, 12.0, true, EnumPowerTier.MEDIUM),
HV("hv", "techreborn:blocks/cables/hv_cable", 2048, 12.0, true, EnumPowerTier.HIGH, HVCable.class), HV("hv", "techreborn:blocks/cables/hv_cable", Material.IRON, 2048, 12.0, true, EnumPowerTier.HIGH),
GLASSFIBER("glassfiber", "techreborn:blocks/cables/glass_fiber_cable", 8192, 12.0, false, EnumPowerTier.HIGH, GlassFiberCable.class), GLASSFIBER("glassfiber", "techreborn:blocks/cables/glass_fiber_cable", Material.GLASS, 8192, 12.0, false, EnumPowerTier.HIGH),
ICOPPER("insulatedcopper", "techreborn:blocks/cables/copper_insulated_cable", 128, 10.0, false, EnumPowerTier.LOW, InsulatedCopperCable.class), ICOPPER("insulatedcopper", "techreborn:blocks/cables/copper_insulated_cable", Material.CLOTH, 128, 10.0, false, EnumPowerTier.LOW),
IGOLD("insulatedgold", "techreborn:blocks/cables/gold_insulated_cable", 512, 10.0, false, EnumPowerTier.MEDIUM, InsulatedGoldCable.class), IGOLD("insulatedgold", "techreborn:blocks/cables/gold_insulated_cable", Material.CLOTH, 512, 10.0, false, EnumPowerTier.MEDIUM),
IHV("insulatedhv", "techreborn:blocks/cables/hv_insulated_cable", 2048, 10.0, false, EnumPowerTier.HIGH, InsulatedHVCable.class); IHV("insulatedhv", "techreborn:blocks/cables/hv_insulated_cable", Material.CLOTH, 2048, 10.0, false, EnumPowerTier.HIGH);
public Material material;
public String textureName = "minecraft:blocks/iron_block"; public String textureName = "minecraft:blocks/iron_block";
public int transferRate = 128; public int transferRate = 128;
public double cableThickness = 3.0; public double cableThickness = 3.0;
public boolean canKill = false; public boolean canKill = false;
public Class<? extends CableMultipart> cableClass;
public EnumPowerTier tier; public EnumPowerTier tier;
private String friendlyName; private String friendlyName;
EnumCableType(String friendlyName, String textureName, int transferRate, double cableThickness, boolean canKill, EnumCableType(String friendlyName, String textureName, Material material, int transferRate, double cableThickness, boolean canKill,
EnumPowerTier tier, Class<? extends CableMultipart> cableClass) EnumPowerTier tier)
{ {
this.friendlyName = friendlyName; this.friendlyName = friendlyName;
this.textureName = textureName; this.textureName = textureName;
this.material = material;
this.transferRate = transferRate; this.transferRate = transferRate;
this.cableThickness = cableThickness / 2; this.cableThickness = cableThickness / 2;
this.canKill = canKill; this.canKill = canKill;
this.cableClass = cableClass;
this.tier = tier; this.tier = tier;
} }

View file

@ -40,17 +40,8 @@ public class ItemCables extends ItemMultiPart implements ITexturedItem
} }
@Override @Override
public IMultipart createPart(World world, BlockPos pos, EnumFacing side, Vec3d hit, ItemStack stack, public IMultipart createPart(World world, BlockPos pos, EnumFacing side, Vec3d hit, ItemStack stack, EntityPlayer player) {
EntityPlayer player) return new CableMultipart(EnumCableType.values()[stack.getItemDamage()]);
{
try
{
return TechRebornParts.multipartHashMap.get(EnumCableType.values()[stack.getItemDamage()]).newInstance();
} catch (InstantiationException | IllegalAccessException e)
{
e.printStackTrace();
}
return null;
} }
@Override @Override

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class CopperCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.COPPER;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class GlassFiberCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.GLASSFIBER;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class GoldCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.GOLD;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class HVCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.HV;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class InsulatedCopperCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.ICOPPER;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class InsulatedGoldCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.IGOLD;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class InsulatedHVCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.IHV;
}
}

View file

@ -1,16 +0,0 @@
package techreborn.parts.powerCables.types;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
/**
* Created by modmuss50 on 05/03/2016.
*/
public class TinCable extends CableMultipart
{
@Override
public EnumCableType getCableType()
{
return EnumCableType.TIN;
}
}

View file

@ -0,0 +1,241 @@
package techreborn.power;
import cofh.api.energy.IEnergyReceiver;
import com.google.common.collect.Lists;
import ic2.api.energy.tile.IEnergySink;
import net.darkhax.tesla.api.ITeslaConsumer;
import net.darkhax.tesla.capability.TeslaCapabilities;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.Loader;
import reborncore.api.power.IEnergyInterfaceTile;
import reborncore.common.RebornCoreConfig;
import reborncore.common.powerSystem.TilePowerAcceptor;
import reborncore.mcmultipart.block.TileMultipartContainer;
import reborncore.mcmultipart.multipart.ISlottedPart;
import reborncore.mcmultipart.multipart.PartSlot;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.function.BiFunction;
public class PowerNet {
/**
* Same as {@link #dispatchEnergyPacketRecursively(World, ArrayList, BlockPos, boolean, double)}
* But not simulated and excluding source block
* @param world the world to dispatch in
* @param energyAmount energy units to dispatch
* @return dispatched energy units
*/
public static double dispatchEnergyPacket(World world, BlockPos source, double energyAmount) {
return dispatchEnergyPacketRecursively(world, Lists.newArrayList(source), source, false, energyAmount);
}
/**
* Dispatches energy packet recursively through wires to all connected decives
* @param world the world to dispatch in
* @param excludes blocks to exclude from checking. as example, start block
* @param blockPos block pos to start checking
* @param maxEnergy energy units to dispatch
* @param simulate true if dispatch is only simulated
* @return dispatched energy units
*/
public static double dispatchEnergyPacketRecursively(World world, ArrayList<BlockPos> excludes, BlockPos blockPos, boolean simulate, final double maxEnergy) {
double energyLeft = maxEnergy;
Collection<EnumFacing> connections = Lists.newArrayList(EnumFacing.VALUES);
//Workaround for multipart cables
CableMultipart selfCable = getWire(world, blockPos);
if(selfCable != null) {
connections = selfCable.connectedSides.keySet();
}
TileEntity tileEntity = world.getTileEntity(blockPos);
if(tileEntity instanceof TilePowerAcceptor) {
for(EnumFacing facing : EnumFacing.VALUES) {
if(!((TilePowerAcceptor) tileEntity).canProvideEnergy(facing))
connections.remove(facing);
}
}
for(EnumFacing facing : connections) {
BlockPos offsetPos = blockPos.offset(facing);
if(!excludes.contains(offsetPos)) {
excludes.add(offsetPos);
if(isWire(world, offsetPos)) {
CableMultipart cable = getWire(world, offsetPos);
EnumCableType cableType = cable.getCableType();
double transferRate = cableType.transferRate;
double maxPacket = transferRate > maxEnergy ? maxEnergy : transferRate;
energyLeft -= dispatchEnergyPacketRecursively(world, excludes, offsetPos, simulate, maxPacket);
if(energyLeft == 0) {
if(selfCable != null)
selfCable.lastEnergyPacket = maxEnergy * 1.3F;
return maxEnergy;
}
} else {
PowerNetReceiver receiver = getReceiver(world, facing.getOpposite(), offsetPos);
if(receiver != null) {
energyLeft -= receiver.receiveEnergy(energyLeft, simulate);
if(energyLeft == 0) {
if(selfCable != null)
selfCable.lastEnergyPacket = maxEnergy * 1.3F;
return maxEnergy;
}
}
}
}
}
double energyDispatched = maxEnergy - energyLeft;
if(selfCable != null)
selfCable.lastEnergyPacket = energyDispatched * 1.3F;
return energyDispatched;
}
//////////////////// Wire utilities ////////////////////
public static boolean isWire(World world, BlockPos blockPos) {
return getWire(world, blockPos) != null;
}
public static CableMultipart getWire(World world, BlockPos pos) {
TileEntity tileEntity = world.getTileEntity(pos);
if(tileEntity instanceof TileMultipartContainer) {
TileMultipartContainer multipart = (TileMultipartContainer) tileEntity;
ISlottedPart centerPart = multipart.getPartInSlot(PartSlot.CENTER);
if(centerPart instanceof CableMultipart)
return (CableMultipart) centerPart;
}
return null;
}
//////////////////// Power Net Sources functionality ////////////////////
//TODO
//////////////////// Power Net Receivers functionality ////////////////////
public static PowerNetReceiver getReceiver(World world, EnumFacing side, BlockPos pos) {
TileEntity tileEntity = world.getTileEntity(pos);
if(Loader.isModLoaded("IC2") && RebornCoreConfig.getRebornPower().eu()) {
PowerNetReceiver ic2receiver = getIC2Receiver(tileEntity, side);
if(ic2receiver != null) return ic2receiver;
}
if(Loader.isModLoaded("Tesla") && RebornCoreConfig.getRebornPower().tesla()) {
PowerNetReceiver teslaReceiver = getTeslaReceiver(tileEntity, side);
if(teslaReceiver != null) return teslaReceiver;
}
if(RebornCoreConfig.getRebornPower().rf()) {
PowerNetReceiver rfReceiver = getRFReceiver(tileEntity, side);
if(rfReceiver != null) return rfReceiver;
}
if(RebornCoreConfig.getRebornPower().internal()) {
PowerNetReceiver internalReceiver = getInternalReceiver(tileEntity, side);
if(internalReceiver != null) return internalReceiver;
}
return null;
}
public static PowerNetReceiver getInternalReceiver(TileEntity tileEntity, EnumFacing side) {
if(tileEntity instanceof IEnergyInterfaceTile) {
IEnergyInterfaceTile energyInterface = (IEnergyInterfaceTile) tileEntity;
return new PowerNetReceiver(
(energy, simulated) -> {
if(energyInterface.canAcceptEnergy(side))
return energyInterface.addEnergy(energy, simulated);
return 0.0;
});
}
return null;
}
public static PowerNetReceiver getIC2Receiver(TileEntity tileEntity, EnumFacing side) {
if(tileEntity instanceof IEnergySink) {
IEnergySink acceptor = (IEnergySink) tileEntity;
return new PowerNetReceiver(
(energy, simulated) -> {
if(simulated) {
double max = acceptor.getDemandedEnergy();
return max > energy ? energy : max;
}
return energy - acceptor.injectEnergy(side, energy, acceptor.getSinkTier());
});
}
return null;
}
public static PowerNetReceiver getTeslaReceiver(TileEntity tileEntity, EnumFacing side) {
if(tileEntity.hasCapability(TeslaCapabilities.CAPABILITY_CONSUMER, side)) {
ITeslaConsumer consumer = tileEntity.getCapability(TeslaCapabilities.CAPABILITY_CONSUMER, side);
return new PowerNetReceiver(
(energy, simulated) -> {
long teslaEnergy = eu2tesla(energy);
return tesla2eu(consumer.givePower(teslaEnergy, simulated));
});
}
return null;
}
public static PowerNetReceiver getRFReceiver(TileEntity tileEntity, EnumFacing side) {
if(tileEntity instanceof IEnergyReceiver) {
IEnergyReceiver receiver = (IEnergyReceiver) tileEntity;
return new PowerNetReceiver(
(energy, simulated) -> {
int rfEnergy = eu2rf(energy);
return rf2eu(receiver.receiveEnergy(side, rfEnergy, simulated));
});
}
return null;
}
//////////////////// Energy Conversion utils ////////////////////
public static double rf2eu(int rf) {
return rf / 4F;
}
public static int eu2rf(double eu) {
return (int) Math.floor(eu * 4F);
}
public static long eu2tesla(double eu) {
return (long) Math.floor(eu / 3.75F);
}
public static double tesla2eu(long tesla) {
return tesla * 3.75F;
}
public static class PowerNetReceiver {
private final BiFunction<Double, Boolean, Double> receiveEnergy;
public PowerNetReceiver(BiFunction<Double, Boolean, Double> receiveEnergy) {
this.receiveEnergy = receiveEnergy;
}
/**
* Sends given amount fo EU to receiver
* @param max max eu to receive
* @return eu received
*/
public double receiveEnergy(double max, boolean simulated) {
return receiveEnergy.apply(max, simulated);
}
}
}

View file

@ -1,10 +0,0 @@
package techreborn.power;
import net.minecraftforge.fml.common.eventhandler.Event;
public class PowerTickEvent extends Event
{
public PowerTickEvent()
{
}
}

View file

@ -1,358 +0,0 @@
package techreborn.power;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import reborncore.api.power.IEnergyInterfaceTile;
import techreborn.parts.powerCables.CableMultipart;
import techreborn.parts.powerCables.EnumCableType;
public class TRPowerNet
{
public ArrayList<EnergyHandler> endpoints = new ArrayList();
int tick = 0;
EnumCableType cableType;
private ArrayList<CableMultipart> cables = new ArrayList();
private int energy = 0;
public TRPowerNet(EnumCableType cableType)
{
this.cableType = cableType;
MinecraftForge.EVENT_BUS.register(this);
}
public static void buildEndpoint(TRPowerNet net)
{
ArrayList<CableMultipart> parts = new ArrayList<>();
ArrayList<CableMultipart> partsToMerge = new ArrayList<>();
parts.addAll(net.cables);
for (CableMultipart cable : parts)
{
for (EnumFacing facing : EnumFacing.VALUES)
{
BlockPos pos = cable.getPos().offset(facing);
TileEntity tile = cable.getWorld().getTileEntity(pos);
if (tile != null && tile instanceof IEnergyInterfaceTile)
{
IEnergyInterfaceTile eit = (IEnergyInterfaceTile) tile;
net.addConnection(eit, facing);
}
CableMultipart cableMultipart = CableMultipart.getPartFromWorld(cable.getWorld(), pos, null);
if (cableMultipart != null)
{
if (cableMultipart.getNetwork() != net)
{
partsToMerge.add(cableMultipart);
}
}
}
}
for (CableMultipart cableMultipart : partsToMerge)
{
cableMultipart.mergeWith = net;
}
net.checkAndRemoveOldEndpoints();
}
public int getIOLimit()
{
return cableType.transferRate;
}
@SubscribeEvent
public void tick(PowerTickEvent evt)
{
if (tick < 20)
{
tick++;
return;
}
if (tick % 80 == 0)
{
List<CableMultipart> oldCables = new ArrayList<>();
for (CableMultipart cableMultipart : cables)
{
if (cableMultipart.getWorld() == null || cableMultipart.getPos() == null)
{
oldCables.add(cableMultipart);
}
CableMultipart mp = cableMultipart.getPartFromWorld(cableMultipart.getWorld(), cableMultipart.getPos(),
null);
if (mp == null)
{
oldCables.add(cableMultipart);
}
}
cables.removeAll(oldCables);
}
if (!cables.isEmpty())
{
ArrayList<EnergyHandler> collectibles = new ArrayList();
ArrayList<EnergyHandler> insertibles = new ArrayList();
for (EnergyHandler ei : endpoints)
{
if (ei.isCollectible())
{
collectibles.add(ei);
}
if (ei.isInsertible())
{
insertibles.add(ei);
}
}
if (energy < cableType.transferRate * cables.size())
{
for (EnergyHandler handler : collectibles)
{
energy += handler.collectEnergy(cableType.transferRate);
}
}
for (EnergyHandler handler : insertibles)
{
energy -= handler.addEnergy(Math.min(energy, cableType.transferRate));
}
} else
{
MinecraftForge.EVENT_BUS.unregister(this);
}
tick++;
}
public void addElement(CableMultipart te)
{
if (!cables.contains(te))
{
cables.add(te);
}
}
public void removeElement(CableMultipart te)
{
cables.remove(te);
this.rebuild();
this.checkAndRemoveOldEndpoints();
}
public void checkAndRemoveOldEndpoints()
{
List<EnergyHandler> deadHandlers = new ArrayList<>();
for (EnergyHandler energyHandler : endpoints)
{
TileEntity tile = (TileEntity) energyHandler.tile;
if (tile.getWorld().getTileEntity(tile.getPos()) == null)
{
deadHandlers.add(energyHandler);
} else
{
boolean hasNet = false;
for (EnumFacing facing : EnumFacing.VALUES)
{
BlockPos pos = tile.getPos().offset(facing);
CableMultipart multipart = CableMultipart.getPartFromWorld(tile.getWorld(), pos, facing);
if (multipart != null && multipart.getNetwork() == this)
{
hasNet = true;
}
}
if (!hasNet)
{
deadHandlers.add(energyHandler);
}
}
}
endpoints.removeAll(deadHandlers);
}
public void rebuild()
{
for (int i = 0; i < cables.size(); i++)
{
CableMultipart te = cables.get(i);
te.setNetwork(null);
te.findAndJoinNetwork(te.getWorld(), te.getPos());
}
this.clear(false);
MinecraftForge.EVENT_BUS.unregister(this);
}
public int getEnergy()
{
return energy;
}
public void setEnergy(int energy)
{
energy += energy;
if (energy < 0)
{
energy = 0;
}
}
public void addConnection(IEnergyInterfaceTile ih, EnumFacing dir)
{
if (ih instanceof CableMultipart)
return;
EnergyHandler has = this.getHandleFrom(ih);
if (has == null)
{
endpoints.add(new EnergyHandler(ih, cableType, dir));
} else
{
has.side = dir;
}
}
public void merge(TRPowerNet n)
{
if (n != this)
{
ArrayList<CableMultipart> li = new ArrayList();
for (int i = 0; i < n.cables.size(); i++)
{
CableMultipart wire = n.cables.get(i);
li.add(wire);
}
for (EnergyHandler ei : n.endpoints)
{
endpoints.add(ei);
}
n.clear(false);
for (int i = 0; i < li.size(); i++)
{
CableMultipart wire = li.get(i);
wire.setNetwork(this);
}
checkAndRemoveOldEndpoints();
MinecraftForge.EVENT_BUS.unregister(n);
}
}
private EnergyHandler getHandleFrom(IEnergyInterfaceTile tile)
{
for (EnergyHandler ei : endpoints)
{
if (ei.tile == tile)
return ei;
}
return null;
}
private void clear(boolean clearTiles)
{
if (clearTiles)
{
for (int i = 0; i < cables.size(); i++)
{
cables.get(i).resetNetwork();
}
}
cables.clear();
endpoints.clear();
energy = 0;
MinecraftForge.EVENT_BUS.unregister(this);
}
public int addEnergy(int maxAdd, boolean simulate)
{
if (energy >= this.getIOLimit())
return 0;
maxAdd = Math.min(this.getIOLimit(), maxAdd);
if (!simulate)
energy += maxAdd;
return maxAdd;
}
private static class EnergyHandler
{
private final IEnergyInterfaceTile tile;
private final EnumCableType type;
private EnumFacing side;
private EnergyHandler(IEnergyInterfaceTile ih, EnumCableType type, EnumFacing dir)
{
tile = ih;
this.type = type;
this.side = dir;
}
public boolean isInsertible()
{
return this.getTotalInsertible() > 0;
}
public boolean isCollectible()
{
return this.getTotalCollectible() > 0;
}
public boolean contains(IEnergyInterfaceTile tile)
{
return tile == this.tile;
}
public int collectEnergy(int max)
{
int total = 0;
if (tile.canProvideEnergy(side.getOpposite()))
{
int collect = (int) Math.min(max, Math.min(tile.getMaxOutput(), tile.getEnergy()));
total = (int) tile.useEnergy(collect, false);
}
return total;
}
public int addEnergy(int max)
{
int total = 0;
if (tile.canAcceptEnergy(side.getOpposite()) && max > 0)
{
if (type.tier.ordinal() > tile.getTier().ordinal() && max > tile.getMaxInput())
{
if (tile instanceof TileEntity)
{
((TileEntity) tile).getWorld().createExplosion(
new EntityTNTPrimed(((TileEntity) tile).getWorld()),
((TileEntity) tile).getPos().getX(), ((TileEntity) tile).getPos().getY(),
((TileEntity) tile).getPos().getZ(), 2.5F, true);
}
return 0;
}
int add = max - total;
total += tile.addEnergy(add, false);
}
return total;
}
public int getTotalCollectible()
{
if (tile.canProvideEnergy(side.getOpposite()) && tile.getEnergy() != 0)
{
return (int) Math.min(tile.getMaxOutput(), tile.getEnergy());
}
return 0;
}
public int getTotalInsertible()
{
int total = 0;
if (tile.canAcceptEnergy(side.getOpposite()) && tile.getMaxPower() - tile.getEnergy() != 0)
{
total += tile.addEnergy(type.transferRate, true);
}
return total;
}
}
}

View file

@ -13,6 +13,7 @@ import reborncore.common.util.ItemUtils;
import techreborn.api.reactor.FusionReactorRecipe; import techreborn.api.reactor.FusionReactorRecipe;
import techreborn.api.reactor.FusionReactorRecipeHelper; import techreborn.api.reactor.FusionReactorRecipeHelper;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileEntityFusionController extends TilePowerAcceptor implements IInventoryProvider public class TileEntityFusionController extends TilePowerAcceptor implements IInventoryProvider
{ {
@ -36,8 +37,7 @@ public class TileEntityFusionController extends TilePowerAcceptor implements IIn
} }
@Override @Override
public double getMaxPower() public double getMaxPower() {
{
return 100000000; return 100000000;
} }
@ -64,10 +64,8 @@ public class TileEntityFusionController extends TilePowerAcceptor implements IIn
} }
@Override @Override
public double getMaxInput() public double getMaxInput() {
{ if (hasStartedCrafting) {
if (hasStartedCrafting)
{
return 0; return 0;
} }
return 8192; return 8192;
@ -275,6 +273,12 @@ public class TileEntityFusionController extends TilePowerAcceptor implements IIn
{ {
inventory.hasChanged = false; inventory.hasChanged = false;
} }
if (!worldObj.isRemote && getEnergy() > 0 && hasStartedCrafting) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
private boolean validateRecipe() private boolean validateRecipe()

View file

@ -18,6 +18,7 @@ import reborncore.common.util.Inventory;
import reborncore.common.util.Tank; import reborncore.common.util.Tank;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileDieselGenerator extends TilePowerAcceptor implements IWrenchable, IFluidHandler, IInventoryProvider public class TileDieselGenerator extends TilePowerAcceptor implements IWrenchable, IFluidHandler, IInventoryProvider
{ {
@ -131,35 +132,33 @@ public class TileDieselGenerator extends TilePowerAcceptor implements IWrenchabl
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote) {
{
FluidUtils.drainContainers(this, inventory, 0, 1); FluidUtils.drainContainers(this, inventory, 0, 1);
FluidUtils.fillContainers(this, inventory, 0, 1, tank.getFluidType()); FluidUtils.fillContainers(this, inventory, 0, 1, tank.getFluidType());
if (tank.getFluidType() != null && getStackInSlot(2) == null) if (tank.getFluidType() != null && getStackInSlot(2) == null) {
{
inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock())); inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock()));
syncWithAll(); syncWithAll();
} else if (tank.getFluidType() == null && getStackInSlot(2) != null) } else if (tank.getFluidType() == null && getStackInSlot(2) != null) {
{
setInventorySlotContents(2, null); setInventorySlotContents(2, null);
syncWithAll(); syncWithAll();
} }
if (!tank.isEmpty() && tank.getFluidType() != null if (!tank.isEmpty() && tank.getFluidType() != null
&& FluidPowerManager.fluidPowerValues.containsKey(tank.getFluidType())) && FluidPowerManager.fluidPowerValues.containsKey(tank.getFluidType())) {
{
double powerIn = FluidPowerManager.fluidPowerValues.get(tank.getFluidType()); double powerIn = FluidPowerManager.fluidPowerValues.get(tank.getFluidType());
if (getFreeSpace() >= powerIn) if (getFreeSpace() >= powerIn) {
{
addEnergy(powerIn, false); addEnergy(powerIn, false);
tank.drain(1, true); tank.drain(1, true);
} }
} }
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -12,6 +12,7 @@ import reborncore.common.powerSystem.TilePowerAcceptor;
import reborncore.common.util.Inventory; import reborncore.common.util.Inventory;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileDragonEggSiphoner extends TilePowerAcceptor implements IWrenchable,IInventoryProvider public class TileDragonEggSiphoner extends TilePowerAcceptor implements IWrenchable,IInventoryProvider
{ {
@ -25,18 +26,20 @@ public class TileDragonEggSiphoner extends TilePowerAcceptor implements IWrencha
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote) {
{
if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY() + 1, getPos().getZ())) if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY() + 1, getPos().getZ()))
.getBlock() == Blocks.DRAGON_EGG) .getBlock() == Blocks.DRAGON_EGG) {
{
addEnergy(euTick); addEnergy(euTick);
} }
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -17,6 +17,7 @@ import reborncore.common.util.Inventory;
import reborncore.common.util.Tank; import reborncore.common.util.Tank;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -144,17 +145,14 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, IF
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote) {
{
FluidUtils.drainContainers(this, inventory, 0, 1); FluidUtils.drainContainers(this, inventory, 0, 1);
tank.compareAndUpdate(); tank.compareAndUpdate();
} }
if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) {
{
Integer euPerBucket = fluids.get(tank.getFluidType().getName()); Integer euPerBucket = fluids.get(tank.getFluidType().getName());
// float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8 // float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8
// eu per tick // eu per tick
@ -170,13 +168,16 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, IF
tank.drain(currentWithdraw, true); tank.drain(currentWithdraw, true);
addEnergy(euTick); addEnergy(euTick);
} }
if (tank.getFluidType() != null && getStackInSlot(2) == null) if (tank.getFluidType() != null && getStackInSlot(2) == null) {
{
inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock())); inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock()));
} else if (tank.getFluidType() == null && getStackInSlot(2) != null) } else if (tank.getFluidType() == null && getStackInSlot(2) != null) {
{
setInventorySlotContents(2, null); setInventorySlotContents(2, null);
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -12,6 +12,7 @@ import reborncore.common.blocks.BlockMachineBase;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import reborncore.common.util.Inventory; import reborncore.common.util.Inventory;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileGenerator extends TilePowerAcceptor implements IWrenchable,IInventoryProvider public class TileGenerator extends TilePowerAcceptor implements IWrenchable,IInventoryProvider
{ {
@ -37,45 +38,41 @@ public class TileGenerator extends TilePowerAcceptor implements IWrenchable,IInv
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (worldObj.isRemote) if (worldObj.isRemote) {
{
return; return;
} }
if (getEnergy() < getMaxPower()) if (getEnergy() < getMaxPower()) {
{ if (burnTime > 0) {
if (burnTime > 0)
{
burnTime--; burnTime--;
addEnergy(outputAmount); addEnergy(outputAmount);
isBurning = true; isBurning = true;
} }
} else } else {
{
isBurning = false; isBurning = false;
} }
if (burnTime == 0) if (burnTime == 0) {
{
updateState(); updateState();
burnTime = totalBurnTime = getItemBurnTime(getStackInSlot(fuelSlot)); burnTime = totalBurnTime = getItemBurnTime(getStackInSlot(fuelSlot));
if (burnTime > 0) if (burnTime > 0) {
{
updateState(); updateState();
burnItem = getStackInSlot(fuelSlot); burnItem = getStackInSlot(fuelSlot);
if (getStackInSlot(fuelSlot).stackSize == 1) if (getStackInSlot(fuelSlot).stackSize == 1) {
{
setInventorySlotContents(fuelSlot, null); setInventorySlotContents(fuelSlot, null);
} else } else {
{
decrStackSize(fuelSlot, 1); decrStackSize(fuelSlot, 1);
} }
} }
} }
lastTickBurning = isBurning; lastTickBurning = isBurning;
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
public void updateState() public void updateState()

View file

@ -10,6 +10,7 @@ import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileHeatGenerator extends TilePowerAcceptor implements IWrenchable public class TileHeatGenerator extends TilePowerAcceptor implements IWrenchable
{ {
@ -22,35 +23,33 @@ public class TileHeatGenerator extends TilePowerAcceptor implements IWrenchable
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote) {
{
if (worldObj.getBlockState(new BlockPos(getPos().getX() + 1, getPos().getY(), getPos().getZ())) if (worldObj.getBlockState(new BlockPos(getPos().getX() + 1, getPos().getY(), getPos().getZ()))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(euTick); addEnergy(euTick);
} else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() + 1)) } else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() + 1))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(euTick); addEnergy(euTick);
} else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() - 1)) } else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() - 1))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(euTick); addEnergy(euTick);
} else if (worldObj.getBlockState(new BlockPos(getPos().getX() - 1, getPos().getY(), getPos().getZ())) } else if (worldObj.getBlockState(new BlockPos(getPos().getX() - 1, getPos().getY(), getPos().getZ()))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(euTick); addEnergy(euTick);
} else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY() - 1, getPos().getZ())) } else if (worldObj.getBlockState(new BlockPos(getPos().getX(), getPos().getY() - 1, getPos().getZ()))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(euTick); addEnergy(euTick);
} }
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -10,6 +10,7 @@ import reborncore.api.power.EnumPowerTier;
import reborncore.common.blocks.BlockMachineBase; import reborncore.common.blocks.BlockMachineBase;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.power.PowerNet;
public class TileLightningRod extends TilePowerAcceptor { public class TileLightningRod extends TilePowerAcceptor {
@ -50,6 +51,10 @@ public class TileLightningRod extends TilePowerAcceptor {
} }
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
public float getLightningStrikeMultiplier() { public float getLightningStrikeMultiplier() {

View file

@ -17,6 +17,7 @@ import reborncore.common.util.Inventory;
import reborncore.common.util.Tank; import reborncore.common.util.Tank;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -150,14 +151,12 @@ public class TileSemifluidGenerator extends TilePowerAcceptor implements IWrench
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote)
FluidUtils.drainContainers(this, inventory, 0, 1); FluidUtils.drainContainers(this, inventory, 0, 1);
if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) {
{
Integer euPerBucket = fluids.get(tank.getFluidType().getName()); Integer euPerBucket = fluids.get(tank.getFluidType().getName());
// float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8 // float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8
// eu per tick // eu per tick
@ -173,13 +172,16 @@ public class TileSemifluidGenerator extends TilePowerAcceptor implements IWrench
tank.drain(currentWithdraw, true); tank.drain(currentWithdraw, true);
addEnergy(euTick); addEnergy(euTick);
} }
if (tank.getFluidType() != null && getStackInSlot(2) == null) if (tank.getFluidType() != null && getStackInSlot(2) == null) {
{
inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock())); inventory.setInventorySlotContents(2, new ItemStack(tank.getFluidType().getBlock()));
} else if (tank.getFluidType() == null && getStackInSlot(2) != null) } else if (tank.getFluidType() == null && getStackInSlot(2) != null) {
{
setInventorySlotContents(2, null); setInventorySlotContents(2, null);
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -5,6 +5,7 @@ import net.minecraft.util.ITickable;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.blocks.generator.BlockSolarPanel; import techreborn.blocks.generator.BlockSolarPanel;
import techreborn.power.PowerNet;
import java.util.List; import java.util.List;
@ -25,26 +26,25 @@ public class TileSolarPanel extends TilePowerAcceptor implements ITickable
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) { if (!worldObj.isRemote) {
if (worldObj.getTotalWorldTime() % 60 == 0) if (worldObj.getTotalWorldTime() % 60 == 0) {
{
shouldMakePower = isSunOut(); shouldMakePower = isSunOut();
} }
if (shouldMakePower) if (shouldMakePower) {
{
powerToAdd = 10; powerToAdd = 10;
addEnergy(powerToAdd); addEnergy(powerToAdd);
} else } else {
{
powerToAdd = 0; powerToAdd = 0;
} }
worldObj.setBlockState(getPos(), worldObj.getBlockState(this.getPos()).withProperty(BlockSolarPanel.ACTIVE, isSunOut()));
}
worldObj.setBlockState(getPos(), if (!worldObj.isRemote && getEnergy() > 0) {
worldObj.getBlockState(this.getPos()).withProperty(BlockSolarPanel.ACTIVE, isSunOut())); double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
} }
} }

View file

@ -20,6 +20,7 @@ import reborncore.common.util.Inventory;
import reborncore.common.util.Tank; import reborncore.common.util.Tank;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileThermalGenerator extends TilePowerAcceptor implements IWrenchable, IFluidHandler,IInventoryProvider public class TileThermalGenerator extends TilePowerAcceptor implements IWrenchable, IFluidHandler,IInventoryProvider
{ {
@ -137,51 +138,46 @@ public class TileThermalGenerator extends TilePowerAcceptor implements IWrenchab
@Override @Override
// TODO optimise this code // TODO optimise this code
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (!worldObj.isRemote) if (!worldObj.isRemote) {
{
FluidUtils.drainContainers(this, inventory, 0, 1); FluidUtils.drainContainers(this, inventory, 0, 1);
for (EnumFacing direction : EnumFacing.values()) for (EnumFacing direction : EnumFacing.values()) {
{
if (worldObj.getBlockState(new BlockPos(getPos().getX() + direction.getFrontOffsetX(), if (worldObj.getBlockState(new BlockPos(getPos().getX() + direction.getFrontOffsetX(),
getPos().getY() + direction.getFrontOffsetY(), getPos().getZ() + direction.getFrontOffsetZ())) getPos().getY() + direction.getFrontOffsetY(), getPos().getZ() + direction.getFrontOffsetZ()))
.getBlock() == Blocks.LAVA) .getBlock() == Blocks.LAVA) {
{
addEnergy(1); addEnergy(1);
} }
} }
if (worldObj.getTotalWorldTime() % 40 == 0) if (worldObj.getTotalWorldTime() % 40 == 0) {
{
BlockMachineBase bmb = (BlockMachineBase) worldObj.getBlockState(pos).getBlock(); BlockMachineBase bmb = (BlockMachineBase) worldObj.getBlockState(pos).getBlock();
boolean didFindLava = false; boolean didFindLava = false;
for (EnumFacing direction : EnumFacing.values()) for (EnumFacing direction : EnumFacing.values()) {
{
if (worldObj.getBlockState(new BlockPos(getPos().getX() + direction.getFrontOffsetX(), if (worldObj.getBlockState(new BlockPos(getPos().getX() + direction.getFrontOffsetX(),
getPos().getY() + direction.getFrontOffsetY(), getPos().getY() + direction.getFrontOffsetY(),
getPos().getZ() + direction.getFrontOffsetZ())).getBlock() == Blocks.LAVA) getPos().getZ() + direction.getFrontOffsetZ())).getBlock() == Blocks.LAVA) {
{
didFindLava = true; didFindLava = true;
} }
} }
bmb.setActive(didFindLava, worldObj, pos); bmb.setActive(didFindLava, worldObj, pos);
} }
} }
if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick) {
{
tank.drain(1, true); tank.drain(1, true);
addEnergy(euTick); addEnergy(euTick);
} }
if (tank.getFluidType() != null && getStackInSlot(2) == null) if (tank.getFluidType() != null && getStackInSlot(2) == null) {
{
// inventory.setInventorySlotContents(2, new ItemStack(tank // inventory.setInventorySlotContents(2, new ItemStack(tank
// .getFluidType().getBlock())); // .getFluidType().getBlock()));
} else if (tank.getFluidType() == null && getStackInSlot(2) != null) } else if (tank.getFluidType() == null && getStackInSlot(2) != null) {
{
setInventorySlotContents(2, null); setInventorySlotContents(2, null);
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override

View file

@ -4,6 +4,7 @@ import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.power.PowerNet;
/** /**
* Created by modmuss50 on 25/02/2016. * Created by modmuss50 on 25/02/2016.
@ -19,17 +20,19 @@ public class TileWaterMill extends TilePowerAcceptor
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (worldObj.getTotalWorldTime() % 20 == 0) if (worldObj.getTotalWorldTime() % 20 == 0) {
{
checkForWater(); checkForWater();
} }
if (waterblocks > 0) if (waterblocks > 0) {
{
addEnergy(waterblocks); addEnergy(waterblocks);
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
public void checkForWater() public void checkForWater()

View file

@ -3,6 +3,7 @@ package techreborn.tiles.generator;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.power.PowerNet;
/** /**
* Created by modmuss50 on 25/02/2016. * Created by modmuss50 on 25/02/2016.
@ -18,19 +19,16 @@ public class TileWindMill extends TilePowerAcceptor
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (pos.getY() > 64) if (pos.getY() > 64) {
{ double actualPower = basePower + basePower * worldObj.getThunderStrength(1.0F);
int actualPower = basePower; addEnergy(actualPower);
if (worldObj.isThundering())
{
actualPower *= 1.25;
} }
addEnergy(actualPower); // Value taken from
// http://wiki.industrial-craft.net/?title=Wind_Mill if (!worldObj.isRemote && getEnergy() > 0) {
// Not worth making more complicated double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
} }
} }

View file

@ -10,6 +10,7 @@ import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
import techreborn.power.PowerNet;
public class TileIDSU extends TilePowerAcceptor implements IWrenchable public class TileIDSU extends TilePowerAcceptor implements IWrenchable
{ {
@ -125,32 +126,26 @@ public class TileIDSU extends TilePowerAcceptor implements IWrenchable
return nbttagcompound; return nbttagcompound;
} }
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (ticks == ConfigTechReborn.AverageEuOutTickTime) if (ticks == ConfigTechReborn.AverageEuOutTickTime) {
{
euChange = -1; euChange = -1;
ticks = 0; ticks = 0;
} else } else {
{
ticks++; ticks++;
euChange += getEnergy() - euLastTick; euChange += getEnergy() - euLastTick;
if (euLastTick == getEnergy()) if (euLastTick == getEnergy()) {
{
euChange = 0; euChange = 0;
} }
} }
euLastTick = getEnergy(); euLastTick = getEnergy();
boolean needsInvUpdate = false; if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
if (needsInvUpdate) useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
{
this.markDirty();
} }
} }

View file

@ -6,6 +6,7 @@ import reborncore.api.power.EnumPowerTier;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import reborncore.common.util.Inventory; import reborncore.common.util.Inventory;
import techreborn.config.ConfigTechReborn; import techreborn.config.ConfigTechReborn;
import techreborn.power.PowerNet;
import java.util.ArrayList; import java.util.ArrayList;
@ -27,32 +28,25 @@ public class TileLesu extends TilePowerAcceptor
} }
@Override @Override
public void updateEntity() public void updateEntity() {
{
super.updateEntity(); super.updateEntity();
if (worldObj.isRemote) if (worldObj.isRemote) {
{
return; return;
} }
countedNetworks.clear(); countedNetworks.clear();
connectedBlocks = 0; connectedBlocks = 0;
for (EnumFacing dir : EnumFacing.values()) for (EnumFacing dir : EnumFacing.values()) {
{
if (worldObj.getTileEntity( if (worldObj.getTileEntity(
new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(), new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
getPos().getZ() + dir.getFrontOffsetZ())) instanceof TileLesuStorage) getPos().getZ() + dir.getFrontOffsetZ())) instanceof TileLesuStorage) {
{
if (((TileLesuStorage) worldObj.getTileEntity( if (((TileLesuStorage) worldObj.getTileEntity(
new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(), new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
getPos().getZ() + dir.getFrontOffsetZ()))).network != null) getPos().getZ() + dir.getFrontOffsetZ()))).network != null) {
{
LesuNetwork network = ((TileLesuStorage) worldObj.getTileEntity(new BlockPos( LesuNetwork network = ((TileLesuStorage) worldObj.getTileEntity(new BlockPos(
getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(), getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
getPos().getZ() + dir.getFrontOffsetZ()))).network; getPos().getZ() + dir.getFrontOffsetZ()))).network;
if (!countedNetworks.contains(network)) if (!countedNetworks.contains(network)) {
{ if (network.master == null || network.master == this) {
if (network.master == null || network.master == this)
{
connectedBlocks += network.storages.size(); connectedBlocks += network.storages.size();
countedNetworks.add(network); countedNetworks.add(network);
network.master = this; network.master = this;
@ -65,25 +59,27 @@ public class TileLesu extends TilePowerAcceptor
maxStorage = ((connectedBlocks + 1) * ConfigTechReborn.LesuStoragePerBlock); maxStorage = ((connectedBlocks + 1) * ConfigTechReborn.LesuStoragePerBlock);
output = (connectedBlocks * ConfigTechReborn.ExtraOutputPerLesuBlock) + ConfigTechReborn.BaseLesuOutput; output = (connectedBlocks * ConfigTechReborn.ExtraOutputPerLesuBlock) + ConfigTechReborn.BaseLesuOutput;
if (ticks == ConfigTechReborn.AverageEuOutTickTime) if (ticks == ConfigTechReborn.AverageEuOutTickTime) {
{
euChange = -1; euChange = -1;
ticks = 0; ticks = 0;
} else } else {
{
ticks++; ticks++;
if (euChange == -1) if (euChange == -1) {
{
euChange = 0; euChange = 0;
} }
euChange += getEnergy() - euLastTick; euChange += getEnergy() - euLastTick;
if (euLastTick == getEnergy()) if (euLastTick == getEnergy()) {
{
euChange = 0; euChange = 0;
} }
} }
euLastTick = getEnergy(); euLastTick = getEnergy();
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
public double getEuChange() public double getEuChange()

View file

@ -13,6 +13,7 @@ import reborncore.common.powerSystem.PoweredItem;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import reborncore.common.util.Inventory; import reborncore.common.util.Inventory;
import techreborn.blocks.storage.BlockEnergyStorage; import techreborn.blocks.storage.BlockEnergyStorage;
import techreborn.power.PowerNet;
/** /**
* Created by Rushmead * Created by Rushmead
@ -54,40 +55,39 @@ public class TileEnergyStorage extends TilePowerAcceptor implements IWrenchable,
return entityPlayer.isSneaking(); return entityPlayer.isSneaking();
} }
@Override public void updateEntity() @Override public void updateEntity() {
{ if (inventory.getStackInSlot(0) != null) {
if (inventory.getStackInSlot(0) != null)
{
ItemStack stack = inventory.getStackInSlot(0); ItemStack stack = inventory.getStackInSlot(0);
if (!(stack.getItem() instanceof IEnergyItemInfo)) { if (!(stack.getItem() instanceof IEnergyItemInfo)) {
return; return;
} }
IEnergyItemInfo item = (IEnergyItemInfo) inventory.getStackInSlot(0).getItem(); IEnergyItemInfo item = (IEnergyItemInfo) inventory.getStackInSlot(0).getItem();
if (PoweredItem.getEnergy(stack) != PoweredItem.getMaxPower(stack)) if (PoweredItem.getEnergy(stack) != PoweredItem.getMaxPower(stack)) {
{ if (canUseEnergy(item.getMaxTransfer(stack))) {
if (canUseEnergy(item.getMaxTransfer(stack)))
{
useEnergy(item.getMaxTransfer(stack)); useEnergy(item.getMaxTransfer(stack));
PoweredItem.setEnergy(PoweredItem.getEnergy(stack) + item.getMaxTransfer(stack), stack); PoweredItem.setEnergy(PoweredItem.getEnergy(stack) + item.getMaxTransfer(stack), stack);
} }
} }
} }
if (inventory.getStackInSlot(1) != null) if (inventory.getStackInSlot(1) != null) {
{
ItemStack stack = inventory.getStackInSlot(1); ItemStack stack = inventory.getStackInSlot(1);
if (!(stack.getItem() instanceof IEnergyItemInfo)) { if (!(stack.getItem() instanceof IEnergyItemInfo)) {
return; return;
} }
IEnergyItemInfo item = (IEnergyItemInfo) stack.getItem(); IEnergyItemInfo item = (IEnergyItemInfo) stack.getItem();
if (item.canProvideEnergy(stack)) if (item.canProvideEnergy(stack)) {
{ if (getEnergy() != getMaxPower()) {
if (getEnergy() != getMaxPower())
{
addEnergy(item.getMaxTransfer(stack)); addEnergy(item.getMaxTransfer(stack));
PoweredItem.setEnergy(PoweredItem.getEnergy(stack) - item.getMaxTransfer(stack), stack); PoweredItem.setEnergy(PoweredItem.getEnergy(stack) - item.getMaxTransfer(stack), stack);
} }
} }
} }
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(PowerNet.dispatchEnergyPacket(worldObj, getPos(), maxOutput));
}
} }
@Override @Override