Skip to content

Commit f7b63ae

Browse files
committed
Additional work on the electric system.
Added implementation examples.
1 parent aeeaf9b commit f7b63ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1172
-28
lines changed

energy/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ loom {
1616
dependencies {
1717
if(findProject(":catalyst") != null){
1818
implementation project(path: ':catalyst', configuration: "namedElements")
19+
implementation project(path: ":btwaila",configuration: "namedElements")
1920
} else {
2021
implementation project(path: ':', configuration: "namedElements")
2122
}

energy/src/main/java/sunsetsatellite/catalyst/CatalystEnergy.java

+42-2
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,38 @@
11
package sunsetsatellite.catalyst;
22

33
import net.fabricmc.api.ModInitializer;
4+
import net.minecraft.client.render.block.color.BlockColorDispatcher;
45
import net.minecraft.core.block.Block;
56
import net.minecraft.core.data.tag.Tag;
67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
9+
import sunsetsatellite.catalyst.energy.improved.electric.test.block.color.BlockColorWire;
10+
import sunsetsatellite.catalyst.energy.improved.electric.test.data.ElectricBlocks;
11+
import sunsetsatellite.catalyst.energy.improved.electric.test.data.ElectricConfig;
12+
import sunsetsatellite.catalyst.energy.improved.electric.test.data.WireMaterials;
13+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntityCable;
14+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricBatteryBox;
15+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricGenerator;
16+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricMachine;
817
import sunsetsatellite.catalyst.energy.improved.simple.test.tile.TileEntityBatteryBox;
918
import sunsetsatellite.catalyst.energy.improved.simple.test.tile.TileEntitySimpleGenerator;
19+
import sunsetsatellite.catalyst.energy.improved.simple.test.tile.TileEntitySimpleMachine;
1020
import sunsetsatellite.catalyst.energy.improved.simple.test.tile.TileEntityWire;
1121
import turniplabs.halplibe.helper.EntityHelper;
22+
import turniplabs.halplibe.util.GameStartEntrypoint;
1223
import turniplabs.halplibe.util.TomlConfigHandler;
1324
import turniplabs.halplibe.util.toml.Toml;
1425

26+
import static sunsetsatellite.catalyst.energy.improved.electric.test.data.ElectricBlocks.*;
1527

16-
public class CatalystEnergy implements ModInitializer {
28+
29+
public class CatalystEnergy implements ModInitializer, GameStartEntrypoint {
1730
public static final String MOD_ID = "catalyst-energy";
1831
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
1932
public static final TomlConfigHandler config;
2033

2134
public static final Tag<Block> ENERGY_CONDUITS_CONNECT = Tag.of("energy_conduits_connect");
35+
public static final Tag<Block> WIRES_CONNECT = Tag.of("wires_connect");
2236

2337
/*public static final BlockWire wire = new BlockBuilder(MOD_ID)
2438
.setTextures("catalyst-energy:block/wire")
@@ -60,8 +74,34 @@ public static double map(double valueCoord1,
6074
public void onInitialize() {
6175
EntityHelper.createTileEntity(TileEntityBatteryBox.class,"BatteryBox");
6276
EntityHelper.createTileEntity(TileEntitySimpleGenerator.class,"SimpleGenerator");
63-
EntityHelper.createTileEntity(TileEntitySimpleGenerator.class,"SimpleMachine");
77+
EntityHelper.createTileEntity(TileEntitySimpleMachine.class,"SimpleMachine");
6478
EntityHelper.createTileEntity(TileEntityWire.class,"Wire");
79+
80+
ElectricConfig.class.getClass();
81+
new WireMaterials().init();
82+
new ElectricBlocks().init();
83+
84+
EntityHelper.createTileEntity(TileEntitySimpleElectricBatteryBox.class,"ElBatteryBox");
85+
EntityHelper.createTileEntity(TileEntitySimpleElectricGenerator.class,"ElSimpleGenerator");
86+
EntityHelper.createTileEntity(TileEntitySimpleElectricMachine.class,"ElSimpleMachine");
87+
EntityHelper.createTileEntity(TileEntityCable.class,"ElCable");
88+
6589
LOGGER.info("Catalyst: Energy initialized.");
6690
}
91+
92+
@Override
93+
public void beforeGameStart() {
94+
95+
}
96+
97+
@Override
98+
public void afterGameStart() {
99+
BlockColorDispatcher.getInstance().addDispatch(testWireUlv1x,new BlockColorWire());
100+
BlockColorDispatcher.getInstance().addDispatch(testWireLv1x, new BlockColorWire());
101+
BlockColorDispatcher.getInstance().addDispatch(testWireMv1x, new BlockColorWire());
102+
BlockColorDispatcher.getInstance().addDispatch(testWireHv1x, new BlockColorWire());
103+
BlockColorDispatcher.getInstance().addDispatch(testWireEv1x, new BlockColorWire());
104+
BlockColorDispatcher.getInstance().addDispatch(testWireUv1x, new BlockColorWire());
105+
BlockColorDispatcher.getInstance().addDispatch(testWireOv1x, new BlockColorWire());
106+
}
67107
}

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/api/IElectric.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ default long getCapacityRemaining() {
6464
* @return Amount of energy actually added
6565
*/
6666
default long internalAddEnergy(long energy) {
67-
return internalChangeEnergy(energy);
67+
return internalChangeEnergy(Math.min(energy,getCapacityRemaining()));
6868
}
6969

7070
/**
@@ -73,7 +73,7 @@ default long internalAddEnergy(long energy) {
7373
* @return Amount of energy actually removed
7474
*/
7575
default long internalRemoveEnergy(long energy) {
76-
return internalChangeEnergy(-energy);
76+
return internalChangeEnergy(-Math.min(getEnergy(),energy));
7777
}
7878

7979
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package sunsetsatellite.catalyst.energy.improved.electric.api;
2+
3+
public interface IElectricWire {
4+
WireProperties getProperties();
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package sunsetsatellite.catalyst.energy.improved.electric.api;
2+
3+
public interface IVoltageTiered {
4+
5+
VoltageTier getTier();
6+
}

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/api/VoltageTier.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,27 @@
33
import net.minecraft.core.net.command.TextFormatting;
44

55
public enum VoltageTier {
6-
ULV("Ultra Low Voltage",1,8, TextFormatting.GRAY),
7-
LV("Low Voltage",9,32, TextFormatting.RED),
8-
MV("Medium Voltage",33,128, TextFormatting.ORANGE),
9-
HV("High Voltage",129,512, TextFormatting.YELLOW),
10-
EV("Extreme Voltage",513,1024, TextFormatting.BLUE),
11-
UV("Ultra Voltage",1025,2048, TextFormatting.PURPLE),
12-
OV("Over Voltage",2049,Integer.MAX_VALUE, TextFormatting.MAGENTA);
6+
ULV("Ultra Low Voltage",1,8, TextFormatting.GRAY, 0x555555),
7+
LV("Low Voltage",9,32, TextFormatting.RED,0xFF5555),
8+
MV("Medium Voltage",33,128, TextFormatting.ORANGE,0xFFAA00),
9+
HV("High Voltage",129,512, TextFormatting.YELLOW,0xFFFF55),
10+
EV("Extreme Voltage",513,1024, TextFormatting.GREEN,0x55FF55),
11+
UV("Ultra Voltage",1025,2048, TextFormatting.LIGHT_BLUE,0x5555FF),
12+
OV("Over Voltage",2049,Integer.MAX_VALUE, TextFormatting.MAGENTA,0xFF55FF);
1313

14-
VoltageTier(String voltageName, int minVoltage, int maxVoltage, TextFormatting color){
14+
VoltageTier(String voltageName, int minVoltage, int maxVoltage, TextFormatting textColor, int color){
1515
this.voltageName = voltageName;
1616
this.minVoltage = minVoltage;
1717
this.maxVoltage = maxVoltage;
18+
this.textColor = textColor;
1819
this.color = color;
1920
}
2021

2122
public final String voltageName;
2223
public final int minVoltage;
2324
public final int maxVoltage;
24-
public final TextFormatting color;
25+
public final TextFormatting textColor;
26+
public final int color;
2527

2628
public static VoltageTier get(int voltage){
2729
for (VoltageTier tier : values()) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sunsetsatellite.catalyst.energy.improved.electric.api.impl.btwaila;
2+
3+
import org.slf4j.Logger;
4+
import sunsetsatellite.catalyst.CatalystEnergy;
5+
import sunsetsatellite.catalyst.energy.improved.electric.api.impl.btwaila.tooltip.ElectricTooltip;
6+
import sunsetsatellite.catalyst.energy.improved.electric.api.impl.btwaila.tooltip.ElectricWireTooltip;
7+
import toufoumaster.btwaila.entryplugins.waila.BTWailaCustomTooltipPlugin;
8+
import toufoumaster.btwaila.tooltips.TooltipRegistry;
9+
10+
public class BTWailaCEPlugin implements BTWailaCustomTooltipPlugin {
11+
@Override
12+
public void initializePlugin(TooltipRegistry tooltipRegistry, Logger logger) {
13+
logger.info("Loading tooltips from "+ CatalystEnergy.MOD_ID+"..");
14+
tooltipRegistry.register(new ElectricTooltip());
15+
tooltipRegistry.register(new ElectricWireTooltip());
16+
// tooltipRegistry.register(new FluidTooltip());
17+
// tooltipRegistry.register(new MachineTooltip());
18+
// tooltipRegistry.register(new BoosterTooltip());
19+
// tooltipRegistry.register(new StabilizerTooltip());
20+
// tooltipRegistry.register(new ItemConduitTooltip());
21+
// tooltipRegistry.register(new StorageContainerTooltip());
22+
// tooltipRegistry.register(new MultiConduitTooltip());
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package sunsetsatellite.catalyst.energy.improved.electric.api.impl.btwaila.tooltip;
2+
3+
import net.minecraft.client.render.stitcher.TextureRegistry;
4+
import sunsetsatellite.catalyst.energy.improved.electric.base.TileEntityElectricBase;
5+
import sunsetsatellite.catalyst.energy.improved.electric.base.TileEntityElectricGenerator;
6+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricBatteryBox;
7+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricGenerator;
8+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntitySimpleElectricMachine;
9+
import toufoumaster.btwaila.gui.components.AdvancedInfoComponent;
10+
import toufoumaster.btwaila.tooltips.TileTooltip;
11+
import toufoumaster.btwaila.util.ProgressBarOptions;
12+
13+
public class ElectricTooltip extends TileTooltip<TileEntityElectricBase> {
14+
@Override
15+
public void initTooltip() {
16+
addClass(TileEntitySimpleElectricBatteryBox.class);
17+
addClass(TileEntitySimpleElectricGenerator.class);
18+
addClass(TileEntitySimpleElectricMachine.class);
19+
}
20+
21+
@Override
22+
public void drawAdvancedTooltip(TileEntityElectricBase tile, AdvancedInfoComponent c) {
23+
ProgressBarOptions progressBarOptions = new ProgressBarOptions(160, "Amps: ", true, false);
24+
progressBarOptions.fgOptions.setColor(0xFFAA00);
25+
progressBarOptions.fgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/sand"));
26+
progressBarOptions.bgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/obsidian"));
27+
if(tile instanceof TileEntityElectricGenerator){
28+
c.drawProgressBarTextureWithText((int) tile.getAmpsCurrentlyUsed(),(int) tile.getMaxOutputAmperage(),progressBarOptions,0);
29+
30+
} else {
31+
c.drawProgressBarTextureWithText((int) tile.getAmpsCurrentlyUsed(),(int) tile.getMaxInputAmperage(), progressBarOptions,0);
32+
}
33+
progressBarOptions = new ProgressBarOptions(160, "Energy: ", true, true);
34+
progressBarOptions.fgOptions.setColor(0xFF2020);
35+
progressBarOptions.fgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/sand"));
36+
progressBarOptions.bgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/obsidian"));
37+
c.drawProgressBarTextureWithText((int) tile.getEnergy(),(int) tile.getCapacity(),progressBarOptions,0);
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sunsetsatellite.catalyst.energy.improved.electric.api.impl.btwaila.tooltip;
2+
3+
import net.minecraft.client.render.stitcher.TextureRegistry;
4+
import sunsetsatellite.catalyst.energy.improved.electric.base.TileEntityElectricConductor;
5+
import sunsetsatellite.catalyst.energy.improved.electric.test.tile.TileEntityCable;
6+
import toufoumaster.btwaila.gui.components.AdvancedInfoComponent;
7+
import toufoumaster.btwaila.tooltips.TileTooltip;
8+
import toufoumaster.btwaila.util.ProgressBarOptions;
9+
10+
public class ElectricWireTooltip extends TileTooltip<TileEntityElectricConductor> {
11+
@Override
12+
public void initTooltip() {
13+
addClass(TileEntityCable.class);
14+
}
15+
16+
@Override
17+
public void drawAdvancedTooltip(TileEntityElectricConductor tile, AdvancedInfoComponent c) {
18+
ProgressBarOptions progressBarOptions = new ProgressBarOptions(160, "Avg. Current (mA): ", true, false);
19+
progressBarOptions.fgOptions.setColor(0xFFAA00);
20+
progressBarOptions.fgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/sand"));
21+
progressBarOptions.bgOptions.setCoordinate(TextureRegistry.getTexture("minecraft:block/obsidian"));
22+
c.drawProgressBarTextureWithText((int) (tile.getAverageAmpLoad()*1000), (int) (tile.getAmpRating()*1000), progressBarOptions,0);
23+
}
24+
}

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/base/TileEntityElectricBase.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33
import net.minecraft.core.block.entity.TileEntity;
44
import sunsetsatellite.catalyst.core.util.Direction;
55
import sunsetsatellite.catalyst.core.util.Vec3i;
6+
import sunsetsatellite.catalyst.core.util.mixin.interfaces.ITileEntityInit;
67
import sunsetsatellite.catalyst.core.util.network.Network;
78
import sunsetsatellite.catalyst.core.util.network.NetworkComponentTile;
89
import sunsetsatellite.catalyst.core.util.network.NetworkType;
910
import sunsetsatellite.catalyst.energy.improved.electric.api.IElectric;
11+
import sunsetsatellite.catalyst.energy.improved.electric.api.IVoltageTiered;
12+
import sunsetsatellite.catalyst.energy.improved.electric.api.VoltageTier;
13+
import sunsetsatellite.catalyst.energy.improved.electric.test.block.BlockElectric;
1014

1115

1216
@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"})
13-
public abstract class TileEntityElectricBase extends TileEntity implements IElectric, NetworkComponentTile {
17+
public abstract class TileEntityElectricBase extends TileEntity implements IElectric, IVoltageTiered, ITileEntityInit, NetworkComponentTile {
1418

1519
protected long energy = 0;
1620
protected long capacity = 0;
@@ -25,6 +29,12 @@ public abstract class TileEntityElectricBase extends TileEntity implements IElec
2529

2630
public TileEntityElectricBase() {}
2731

32+
@Override
33+
public VoltageTier getTier() {
34+
BlockElectric block = (BlockElectric) getBlockType();
35+
return block.getTier();
36+
}
37+
2838
//IEnergyContainer
2939
@Override
3040
public long getEnergy() {

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/base/TileEntityElectricConductor.java

+16-6
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
package sunsetsatellite.catalyst.energy.improved.electric.base;
22

33
import net.minecraft.core.block.entity.TileEntity;
4-
import sunsetsatellite.catalyst.core.util.ConduitCapability;
5-
import sunsetsatellite.catalyst.core.util.Direction;
6-
import sunsetsatellite.catalyst.core.util.IConduitTile;
7-
import sunsetsatellite.catalyst.core.util.Vec3i;
4+
import sunsetsatellite.catalyst.core.util.*;
5+
import sunsetsatellite.catalyst.core.util.mixin.interfaces.ITileEntityInit;
86
import sunsetsatellite.catalyst.core.util.network.Network;
97
import sunsetsatellite.catalyst.core.util.network.NetworkType;
108
import sunsetsatellite.catalyst.energy.improved.electric.api.IElectric;
119
import sunsetsatellite.catalyst.energy.improved.electric.api.WireProperties;
1210

13-
public abstract class TileEntityElectricConductor extends TileEntity implements IConduitTile {
11+
public abstract class TileEntityElectricConductor extends TileEntity implements IConduitTile, ITileEntityInit {
1412
public Network energyNet;
1513
protected WireProperties properties;
1614
protected long voltageRating = 0;
1715
protected long ampRating = 0;
1816

19-
protected long ampLoad = 0;
17+
protected AveragingCounter averageAmpLoad = new AveragingCounter();
2018
protected long temperature = 0;
2119

2220
@Override
@@ -58,6 +56,18 @@ public long getTemperature() {
5856
return temperature;
5957
}
6058

59+
public void incrementAmperage(long amps){
60+
averageAmpLoad.increment(worldObj,amps);
61+
int dif = (int) (averageAmpLoad.getLast(worldObj) - getAmpRating());
62+
if (dif > 0) {
63+
//TODO: burn cable here later
64+
}
65+
}
66+
67+
public double getAverageAmpLoad(){
68+
return averageAmpLoad.getAverage(worldObj);
69+
}
70+
6171
public WireProperties getProperties() {
6272
return properties;
6373
}

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/base/TileEntityElectricDevice.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import sunsetsatellite.catalyst.core.util.network.NetworkComponentTile;
77
import sunsetsatellite.catalyst.core.util.network.NetworkPath;
88
import sunsetsatellite.catalyst.energy.improved.electric.api.IElectric;
9-
import sunsetsatellite.catalyst.energy.improved.simple.test.tile.TileEntityWire;
109

1110

1211

@@ -37,8 +36,8 @@ public long receiveEnergy(@NotNull Direction dir, long amperage) {
3736
}
3837
long remainingCapacity = getCapacityRemaining();
3938
TileEntity tile = dir.getTileEntity(worldObj,this);
40-
if(tile instanceof TileEntityWire) {
41-
TileEntityWire wire = (TileEntityWire) tile;
39+
if(tile instanceof TileEntityElectricConductor) {
40+
TileEntityElectricConductor wire = (TileEntityElectricConductor) tile;
4241

4342
for (NetworkPath path : energyNet.getPathData(wire.getPosition())) {
4443
long pathLoss = 0;
@@ -50,7 +49,7 @@ public long receiveEnergy(@NotNull Direction dir, long amperage) {
5049
if(dest.canProvide(path.targetDirection)) {
5150
if (canReceive(dir)) {
5251
long voltage = dest.getMaxOutputVoltage();
53-
amperage = Math.min(amperage, dest.getMaxOutputAmperage());
52+
amperage = Math.min(amperage, (dest.getMaxOutputAmperage() - dest.getAmpsCurrentlyUsed()));
5453
for (NetworkComponentTile component : path.path) {
5554
if(component instanceof TileEntityElectricConductor){
5655
pathLoss += ((TileEntityElectricConductor) component).getProperties().getMaterial().getLossPerBlock();
@@ -80,13 +79,16 @@ public long receiveEnergy(@NotNull Direction dir, long amperage) {
8079
//TODO: do something bad here later :tf:
8180
return Math.max(amperage, getMaxInputAmperage() - ampsUsing); //short circuit amperage
8281
}
83-
if(remainingCapacity > pathVoltage){
82+
if(remainingCapacity >= pathVoltage){
8483
long willUseAmps = Math.min(remainingCapacity / pathVoltage, Math.min(amperage, getMaxInputAmperage() - ampsUsing));
8584
if(willUseAmps > 0){
8685
for (NetworkComponentTile pathTile : path.path) {
8786
if (pathTile instanceof TileEntityElectricConductor) {
8887
TileEntityElectricConductor pathWire = (TileEntityElectricConductor) pathTile;
89-
//TODO: increment amps for wires
88+
long voltageTraveled = voltage;
89+
voltageTraveled -= pathWire.getProperties().getMaterial().getLossPerBlock();
90+
if (voltageTraveled <= 0) break;
91+
pathWire.incrementAmperage(willUseAmps);
9092
}
9193
}
9294
long willUseEnergy = pathVoltage * willUseAmps;

energy/src/main/java/sunsetsatellite/catalyst/energy/improved/electric/base/TileEntityElectricGenerator.java

+5
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ public boolean canProvide(@NotNull Direction dir) {
2121
return true;
2222
}
2323

24+
@Override
25+
public long receiveEnergy(@NotNull Direction dir, long amperage) {
26+
return 0;
27+
}
28+
2429
}

0 commit comments

Comments
 (0)