Merge remote-tracking branch 'origin/1.12' into 1.12

This commit is contained in:
modmuss50 2017-10-12 17:50:13 +01:00
commit b7b9cb9963
2 changed files with 94 additions and 25 deletions

View file

@ -30,14 +30,14 @@ import reborncore.api.power.EnumPowerTier;
import techreborn.init.ModBlocks; import techreborn.init.ModBlocks;
public enum EnumCableType implements IStringSerializable { public enum EnumCableType implements IStringSerializable {
COPPER("copper", "techreborn:blocks/cables/copper_cable", 128, 12.0, true, EnumPowerTier.LOW), COPPER("copper", "techreborn:blocks/cables/copper_cable", 128, 12.0, true, EnumPowerTier.MEDIUM),
TIN("tin", "techreborn:blocks/cables/tin_cable", 32, 12.0, true, EnumPowerTier.MEDIUM), TIN("tin", "techreborn:blocks/cables/tin_cable", 32, 12.0, true, EnumPowerTier.LOW),
GOLD("gold", "techreborn:blocks/cables/gold_cable", 512, 12.0, true, EnumPowerTier.MEDIUM), GOLD("gold", "techreborn:blocks/cables/gold_cable", 512, 12.0, true, EnumPowerTier.HIGH),
HV("hv", "techreborn:blocks/cables/hv_cable", 2048, 12.0, true, EnumPowerTier.HIGH), HV("hv", "techreborn:blocks/cables/hv_cable", 2048, 12.0, true, EnumPowerTier.EXTREME),
GLASSFIBER("glassfiber", "techreborn:blocks/cables/glass_fiber_cable", 8192, 12.0, false, EnumPowerTier.HIGH), GLASSFIBER("glassfiber", "techreborn:blocks/cables/glass_fiber_cable", 8192, 12.0, false, EnumPowerTier.INSANE),
ICOPPER("insulatedcopper", "techreborn:blocks/cables/copper_insulated_cable", 128, 10.0, false, EnumPowerTier.LOW), ICOPPER("insulatedcopper", "techreborn:blocks/cables/copper_insulated_cable", 128, 10.0, false, EnumPowerTier.MEDIUM),
IGOLD("insulatedgold", "techreborn:blocks/cables/gold_insulated_cable", 512, 10.0, false, EnumPowerTier.MEDIUM), IGOLD("insulatedgold", "techreborn:blocks/cables/gold_insulated_cable", 512, 10.0, false, EnumPowerTier.HIGH),
IHV("insulatedhv", "techreborn:blocks/cables/hv_insulated_cable", 2048, 10.0, false, EnumPowerTier.HIGH); IHV("insulatedhv", "techreborn:blocks/cables/hv_insulated_cable", 2048, 10.0, false, EnumPowerTier.EXTREME);
public String textureName = "minecraft:blocks/iron_block"; public String textureName = "minecraft:blocks/iron_block";
public int transferRate = 128; public int transferRate = 128;

View file

@ -25,23 +25,33 @@
package techreborn.tiles.cable; package techreborn.tiles.cable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable; import net.minecraft.util.ITickable;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
import reborncore.api.IListInfoProvider;
import reborncore.common.RebornCoreConfig; import reborncore.common.RebornCoreConfig;
import reborncore.common.powerSystem.PowerSystem;
import reborncore.common.util.StringUtils;
import techreborn.blocks.cable.BlockCable; import techreborn.blocks.cable.BlockCable;
import techreborn.blocks.cable.EnumCableType; import techreborn.blocks.cable.EnumCableType;
/** /**
* Created by modmuss50 on 19/05/2017. * Created by modmuss50 on 19/05/2017.
*/ */
public class TileCable extends TileEntity implements ITickable, IEnergyStorage { public class TileCable extends TileEntity implements ITickable, IEnergyStorage, IListInfoProvider {
public int power = 0; public int power = 0;
private int maxPower = 0; private int transferRate = 0;
private EnumCableType cableType = null;
@Override @Override
public void update() { public void update() {
@ -49,8 +59,9 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
return; return;
} }
if (this.maxPower == 0 ){ if (this.cableType == null ){
this.maxPower = getCableType().transferRate * RebornCoreConfig.euPerFU; this.cableType = getCableType();
this.transferRate = this.cableType.transferRate * RebornCoreConfig.euPerFU;
} }
ArrayList<IEnergyStorage> acceptors = new ArrayList<IEnergyStorage>(); ArrayList<IEnergyStorage> acceptors = new ArrayList<IEnergyStorage>();
@ -64,7 +75,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
continue; continue;
} else if (tile instanceof TileCable) { } else if (tile instanceof TileCable) {
TileCable cable = (TileCable) tile; TileCable cable = (TileCable) tile;
if (power < cable.power) { if (power > cable.power) {
cables.add(cable); cables.add(cable);
} }
} else if (tile.hasCapability(CapabilityEnergy.ENERGY, face.getOpposite())) { } else if (tile.hasCapability(CapabilityEnergy.ENERGY, face.getOpposite())) {
@ -77,38 +88,41 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
} }
if (cables.size() > 0){ if (cables.size() > 0){
int drain = maxPower - power; int drain = Math.min(power, transferRate);
int energyShare = drain / cables.size(); int energyShare = drain / cables.size();
int remainingEnergy = drain; int remainingEnergy = drain;
for (TileCable cable : cables){ if (energyShare > 0) {
int move = cable.extractEnergy(Math.min(energyShare, remainingEnergy), false); for (TileCable cable : cables) {
if (move > 0){ // Push energy to connected cables
remainingEnergy -= move; int move = cable.receiveEnergy(Math.min(energyShare, remainingEnergy), false);
if (move > 0) {
remainingEnergy -= move;
}
} }
extractEnergy(drain - remainingEnergy, false);
} }
receiveEnergy(drain - remainingEnergy, false);
} }
if (acceptors.size() > 0){ if (acceptors.size() > 0){
int drain = Math.min(power, maxPower); int drain = Math.min(power, transferRate);
int energyShare = drain / acceptors.size(); int energyShare = drain / acceptors.size();
int remainingEnergy = drain; int remainingEnergy = drain;
if (energyShare > 0) { if (energyShare > 0) {
for (IEnergyStorage tile : acceptors){ for (IEnergyStorage tile : acceptors){
// Push energy to connected tile acceptors
int move = tile.receiveEnergy(Math.min(energyShare, remainingEnergy), false); int move = tile.receiveEnergy(Math.min(energyShare, remainingEnergy), false);
if (move > 0) { if (move > 0) {
remainingEnergy -= move; remainingEnergy -= move;
} }
} }
extractEnergy(drain - remainingEnergy, false);
} }
extractEnergy(drain - remainingEnergy, false);
} }
} }
private EnumCableType getCableType() { private EnumCableType getCableType() {
//Todo cache this
return world.getBlockState(pos).getValue(BlockCable.TYPE); return world.getBlockState(pos).getValue(BlockCable.TYPE);
} }
@ -118,7 +132,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
return 0; return 0;
} }
int energyReceived = Math.min(maxPower - power, Math.min(maxPower, maxReceive)); int energyReceived = Math.min(getMaxEnergyStored() - getEnergyStored(), Math.min(transferRate, maxReceive));
if (!simulate) if (!simulate)
power += energyReceived; power += energyReceived;
return energyReceived; return energyReceived;
@ -130,7 +144,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
return 0; return 0;
} }
int energyExtracted = Math.min(power, Math.min(this.maxPower, maxExtract)); int energyExtracted = Math.min(getEnergyStored(), Math.min(transferRate, maxExtract));
if (!simulate) if (!simulate)
power -= energyExtracted; power -= energyExtracted;
return energyExtracted; return energyExtracted;
@ -143,7 +157,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
@Override @Override
public int getMaxEnergyStored() { public int getMaxEnergyStored() {
return this.maxPower; return this.transferRate * 6;
} }
@Override @Override
@ -172,4 +186,59 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage {
} }
return super.getCapability(capability, facing); return super.getCapability(capability, facing);
} }
@Override
public NBTTagCompound getUpdateTag() {
// getUpdateTag() is called whenever the chunkdata is sent to the
// client. In contrast getUpdatePacket() is called when the tile entity
// itself wants to sync to the client. In many cases you want to send
// over the same information in getUpdateTag() as in getUpdatePacket().
return writeToNBT(new NBTTagCompound());
}
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
// Prepare a packet for syncing our TE to the client. Since we only have to sync the stack
// and that's all we have we just write our entire NBT here. If you have a complex
// tile entity that doesn't need to have all information on the client you can write
// a more optimal NBT here.
NBTTagCompound nbtTag = new NBTTagCompound();
this.writeToNBT(nbtTag);
return new SPacketUpdateTileEntity(getPos(), 1, nbtTag);
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
// Here we get the packet from the server and read it into our client side tile entity
this.readFromNBT(packet.getNbtCompound());
}
@Override
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
if (compound.hasKey("TileCable")) {
power = compound.getCompoundTag("TileCable").getInteger("power");
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
if (power > 0) {
NBTTagCompound data = new NBTTagCompound();
data.setInteger("power", getEnergyStored());
compound.setTag("TileCable", data);
}
return compound;
}
@Override
public void addInfo(List<String> info, boolean isRealTile) {
if (isRealTile) {
info.add(TextFormatting.GRAY + "Transfer Rate: " + TextFormatting.GOLD
+ PowerSystem.getLocaliszedPowerFormatted(this.transferRate / RebornCoreConfig.euPerFU) + "/t");
info.add(TextFormatting.GRAY + "Tier: " + TextFormatting.GOLD
+ StringUtils.toFirstCapitalAllLowercase(this.cableType.tier.toString()));
}
}
} }