Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PipeNet rewrite #2304

Open
wants to merge 161 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 97 commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
f15f9d7
Shadow JGraphT
M-W-K Dec 14, 2023
2e1fee9
First batch of work
M-W-K Dec 14, 2023
610ed17
Second batch of work, API backbone complete?
M-W-K Dec 15, 2023
c14719e
Add NetGroups to reduce algorithm overhead
M-W-K Dec 15, 2023
4310e10
INodeData to allow for calculating edge weights
M-W-K Dec 15, 2023
65ccf24
Downgrade JGraphT to 1.4 for Java 8 compatibility, and a minor fix
M-W-K Dec 15, 2023
3318506
Improve path caching & fetching
M-W-K Dec 17, 2023
de9f555
Added INodeData math
M-W-K Dec 17, 2023
72a3955
Inefficient syntax begone
M-W-K Dec 17, 2023
e54c467
Running around putting out fires & applying spotless
M-W-K Dec 17, 2023
f487042
Pain and suffering (also fixed item pipe nets?)
M-W-K Dec 17, 2023
7b3982c
Directed graphing, cover predicates (if you squint), and more!
M-W-K Dec 18, 2023
2cf45ba
Final item pipenet cleanup
M-W-K Dec 18, 2023
31af627
Allow control over directed graphing
M-W-K Dec 18, 2023
3bdad1f
laughs in someone else's typo
M-W-K Dec 18, 2023
13b204c
API for single-path networks, converted optical and laser.
M-W-K Dec 18, 2023
55827da
Wait, the fluid net doesn't exist?
M-W-K Dec 18, 2023
cacb049
Finish converting the energy net (central monitor is angry)
M-W-K Dec 19, 2023
493ecaf
Lobotomized central monitor
M-W-K Dec 19, 2023
f4ff075
That took far too much work.
M-W-K Dec 20, 2023
f3bb292
Misc improvements so that the item net works properly.
M-W-K Dec 21, 2023
42ed146
Stack overflow moment
M-W-K Dec 21, 2023
f7955c9
Oops.
M-W-K Dec 21, 2023
9d4e2a2
More stack overflow, yay!
M-W-K Dec 21, 2023
3dc22d7
Deprecation of now obsolete API
M-W-K Dec 21, 2023
026bad7
Remove them spots
M-W-K Dec 21, 2023
7e300a2
Old world compat
M-W-K Dec 21, 2023
6af7e66
Less invasive & more generalized solution to stack overflow
M-W-K Dec 21, 2023
1fa8dbd
Fix NodeData not setting correctly for material pipes
M-W-K Dec 21, 2023
6eba12f
Fix old net conversion setting incorrect edge weights
M-W-K Dec 21, 2023
62d3ac5
Fix central monitor
M-W-K Dec 21, 2023
08aebe6
I didn't spotless the central monitor ;-;
M-W-K Dec 27, 2023
87e6c44
This is all your fault Tech
M-W-K Dec 27, 2023
1031cf2
Merge branch 'master' into graphed-pipenet
M-W-K Dec 29, 2023
a36147c
Merge branch 'master' into graphed-pipenet
M-W-K Jan 15, 2024
a432310
Various refactors & prep for nonticking fluid pipes
M-W-K Jan 17, 2024
e5f4a19
Fluid channels mostly done
M-W-K Jan 18, 2024
abb4edf
Merge remote-tracking branch 'origin/graphed-pipenet' into graphed-pi…
M-W-K Jan 18, 2024
6d8574a
Fluid channels done question mark
M-W-K Jan 19, 2024
2470f9f
Ensure nodes have a group on query
M-W-K Jan 19, 2024
8b4e2c2
Channel sink cover checks
M-W-K Jan 19, 2024
1072796
Channel - group integration
M-W-K Jan 20, 2024
e91fb37
Oh yea, spotless exists
M-W-K Jan 20, 2024
a7d2b48
Sink registration
M-W-K Jan 20, 2024
28c01cb
Remove some unnecessary things
M-W-K Jan 20, 2024
fd8d17c
Move stuff from tickable Fpipe class to normal Fpipe class
M-W-K Jan 22, 2024
c00ee72
Ticker (wait I thought this was supposed to be tickless)
M-W-K Jan 22, 2024
886bad4
Prevent nbt contamination by flow net calculation helpers
M-W-K Jan 23, 2024
fcd2c92
Improve ticker & spotlessify
M-W-K Jan 23, 2024
bb55064
Fix undirected flow nets not using the proper edge weight fetcher
M-W-K Jan 23, 2024
6148b69
Implement fluidpipe channel capacity scaling
M-W-K Jan 23, 2024
ab6c9ab
Bunch of fixes (but not enough)
M-W-K Feb 10, 2024
4e15156
More fixes & improvements
M-W-K Feb 11, 2024
6fc0e9c
Merge branch 'master' into graphed-pipenet
M-W-K Feb 11, 2024
52ee100
Fix nodes not deregistering killed channels
M-W-K Feb 12, 2024
c101711
Merge branch 'master' into graphed-pipenet
M-W-K Feb 24, 2024
f9dd458
Merge remote-tracking branch 'origin/master' into graphed-pipenet
M-W-K May 31, 2024
46616d0
Curse you Ghz
M-W-K May 31, 2024
feb830a
Fluid predicates
M-W-K May 31, 2024
1b63dfd
Fix a potential issue with predication
M-W-K May 31, 2024
1e93ca0
Spotless
M-W-K May 31, 2024
7e4a281
Fix issue with initialization of predicates
M-W-K Jun 4, 2024
8cbb972
flow improvements
M-W-K Jun 4, 2024
0886a4c
Truly Tickless fluid piping (pain)
M-W-K Jun 19, 2024
6e69da5
Fixes
M-W-K Jun 19, 2024
f9e18d7
The Great Generification (and spotless)
M-W-K Jun 19, 2024
801563f
misc
M-W-K Jun 21, 2024
044f325
Energy net overhaul
M-W-K Jun 23, 2024
559f63c
inflow edges & spotless
M-W-K Jun 25, 2024
9fc3e79
adjust cable heating behavior
M-W-K Jun 25, 2024
a920346
fluid net improvements
M-W-K Jun 26, 2024
6adfa6b
iteratorification
M-W-K Jun 27, 2024
569f23a
nth time running spotless
M-W-K Jun 27, 2024
da26fe7
misc improvements & fixes
M-W-K Jun 27, 2024
5f6c9f1
Fix weird compile failure issue
M-W-K Jun 27, 2024
d24b2d4
refactor
M-W-K Jun 27, 2024
907526c
fix energy net overamping
M-W-K Jun 28, 2024
d694934
Fully realized dynamic temp limits for cables
M-W-K Jun 28, 2024
2d24e73
spotless
M-W-K Jun 28, 2024
d5f3dd7
Complete rewrite pt1
M-W-K Jul 11, 2024
59309cb
Complete rewrite pt2
M-W-K Jul 13, 2024
b893b42
Complete rewrite pt3
M-W-K Jul 16, 2024
3c7fc39
Complete rewrite pt4
M-W-K Jul 18, 2024
f8c591d
Complete rewrite pt5
M-W-K Jul 26, 2024
aa8053f
Complete rewrite pt6
M-W-K Jul 27, 2024
e406f6b
Complete rewrite pt7
M-W-K Jul 28, 2024
dab9fbf
Compilable edition
M-W-K Jul 28, 2024
7a32d3e
Spotless edition
M-W-K Jul 28, 2024
cae5f3e
stability fixes
M-W-K Jul 28, 2024
7e0c6bb
baffled by normals
M-W-K Jul 30, 2024
f1abfec
Functional normals. Also some misc fixes.
M-W-K Jul 31, 2024
50cf37e
fixes & improvements
M-W-K Aug 1, 2024
570da02
refactors and improvements
M-W-K Aug 3, 2024
5a10bb3
Cover rendering & misc other
M-W-K Aug 4, 2024
d240268
misc improvements
M-W-K Aug 7, 2024
6febda5
Cover-controlled traversal
M-W-K Aug 11, 2024
695a1ab
Spotless
M-W-K Aug 11, 2024
c778444
Tile Interface
M-W-K Aug 11, 2024
93ffdc8
Bendy lasers & small improvements
M-W-K Aug 11, 2024
cf5857c
Overdue shuffling
M-W-K Aug 11, 2024
9d62953
Merge remote-tracking branch 'origin/master' into graphed-pipenet
M-W-K Aug 11, 2024
358758c
Fix pipe autoconnection to mtes & spotless
M-W-K Aug 11, 2024
ce0c597
address review
M-W-K Aug 11, 2024
fc1c35e
Oops
M-W-K Aug 11, 2024
d26a3e8
Review stuff I missed
M-W-K Aug 12, 2024
4df3020
Fix tricorder reporting of EU flow through cables
M-W-K Aug 12, 2024
b5ce31f
spotless
M-W-K Aug 12, 2024
0df5464
Fix round robin behavior
M-W-K Aug 13, 2024
c54d8f2
Remove unecessary generalization
M-W-K Aug 14, 2024
6f0fd56
Tweaks to logic data handling
M-W-K Aug 14, 2024
28a2752
Misc improvements and fix #2582
M-W-K Aug 15, 2024
b5e1ab7
Fix some very large issues
M-W-K Aug 17, 2024
fbdb32d
Add misc. frame logic
M-W-K Aug 21, 2024
b35af25
Merge remote-tracking branch 'upstream/master' into graphed-pipenet
M-W-K Aug 21, 2024
bdb51f3
Better weak sets
M-W-K Aug 23, 2024
b886cf1
New model registry
M-W-K Aug 23, 2024
522c2f9
Fix instances of me being stupid
M-W-K Aug 25, 2024
1adb2a6
Fix MultiNodeHelper
M-W-K Aug 25, 2024
134566f
Misc improvements & fixes
M-W-K Aug 25, 2024
df877e3
Merge remote-tracking branch 'upstream/master' into graphed-pipenet
M-W-K Aug 25, 2024
5f9760c
Split of world handling & world pos handling
M-W-K Aug 27, 2024
dcb9587
Reference tweaks
M-W-K Aug 29, 2024
689b20e
Annotation
M-W-K Aug 31, 2024
b8aa223
Misc fixes
M-W-K Sep 4, 2024
40950cc
Actually fix quad UVs
M-W-K Sep 4, 2024
8a210b3
Make quad recoloring smarter
M-W-K Sep 4, 2024
65d0051
spotless
M-W-K Sep 4, 2024
40b1cb7
me when I don't null check
M-W-K Sep 5, 2024
e37a1b2
Fix a minor mistake
M-W-K Sep 5, 2024
7848291
Fix misc stuff
M-W-K Sep 5, 2024
ff72f20
More fixes
M-W-K Sep 5, 2024
9e9d0a2
More fixes yey
M-W-K Sep 5, 2024
4b453f9
Accumulated fixes & TOP improvements
M-W-K Sep 6, 2024
0a9d473
Improve TOP formatting
M-W-K Sep 6, 2024
44d0214
Tooltip names
M-W-K Sep 6, 2024
df73818
Unconductive pipes & fix some temperature stuff
M-W-K Sep 6, 2024
65094e7
FluidStackElement for TOP
TechLord22 Sep 6, 2024
eb8cba2
Fix issues with cable burning & more
M-W-K Sep 6, 2024
b1e37c5
Me when I don't test something
M-W-K Sep 7, 2024
fc8094d
anti insert-to-our-source logic
M-W-K Sep 7, 2024
620f73f
Fix weak sets
M-W-K Sep 7, 2024
a7e6e80
Refactory data query logic
M-W-K Sep 7, 2024
40986a0
Move things with filters onto the net level
M-W-K Sep 7, 2024
b9abfbb
Tentative datafix edge rebuilding system
M-W-K Sep 7, 2024
c9fc15e
Prevent endless recursion on datafix
M-W-K Sep 7, 2024
ea3a84a
data fixers
TechLord22 Sep 8, 2024
90d40b6
Tiny fixes
M-W-K Sep 8, 2024
6440b0c
min length tubes
M-W-K Sep 9, 2024
47fdeb5
Merge remote-tracking branch 'main/master' into graphed-pipenet
M-W-K Sep 9, 2024
ee873ce
Merge remote-tracking branch 'main/master' into graphed-pipenet
M-W-K Sep 9, 2024
e36a45e
Fix tests
M-W-K Sep 9, 2024
1d787a8
Laser mirror cable recipe
M-W-K Sep 9, 2024
796e1ae
Fix material tree
M-W-K Sep 9, 2024
3eb8276
recipe adjustments
TechLord22 Sep 9, 2024
7f76d01
tooltip improvements and cleanup
TechLord22 Sep 10, 2024
659162a
Logic types & event-driven registration
M-W-K Sep 10, 2024
3dfb46f
New energy net impl (broken commit)
M-W-K Oct 26, 2024
6e294e4
stuff
M-W-K Nov 29, 2024
1db5648
Stuff, pt2
M-W-K Dec 5, 2024
0537c11
spotless
M-W-K Dec 5, 2024
b1fc4a9
covers & cleanup to compile :lets:
M-W-K Dec 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ dependencies {
api rfg.deobf("curse.maven:ae2-extended-life-570458:4402048") // AE2UEL 0.55.6
api rfg.deobf("curse.maven:ctm-267602:2915363") // CTM 1.0.2.31

// Shadowed Dependencies
// Packages that aren't mods, and thus need to be included in the release files.
shadowCompile 'org.jgrapht:jgrapht-core:1.4.0' // JGraphT 1.4.0

// Non-published dependencies
// Change any to devOnlyNonPublishable to test them in-game.
compileOnly("curse.maven:journeymap-32274:2916002") // Journeymap 5.7.1
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ includeCommonDevEnvMods = true

# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated in your jar. It is your
# responsibility check the licence and request permission for distribution, if required.
usesShadowedDependencies = false
usesShadowedDependencies = true
# If disabled, won't remove unused classes from shaded dependencies. Some libraries use reflection to access
# their own classes, making the minimization unreliable.
minimizeShadowedDependencies = true
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/gregtech/api/block/UnlistedByteProperty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package gregtech.api.block;

import net.minecraftforge.common.property.IUnlistedProperty;

import org.jetbrains.annotations.NotNull;

public class UnlistedByteProperty implements IUnlistedProperty<Byte> {

private final String name;

public UnlistedByteProperty(@NotNull String name) {
this.name = name;
}

@NotNull
@Override
public String getName() {
return this.name;
}

@Override
public boolean isValid(Byte value) {
return true;
}

@NotNull
@Override
public Class<Byte> getType() {
return Byte.class;
}

@Override
public String valueToString(@NotNull Byte value) {
return value.toString();
}
}
36 changes: 36 additions & 0 deletions src/main/java/gregtech/api/block/UnlistedFloatProperty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package gregtech.api.block;

import net.minecraftforge.common.property.IUnlistedProperty;

import org.jetbrains.annotations.NotNull;

public class UnlistedFloatProperty implements IUnlistedProperty<Float> {

private final String name;

public UnlistedFloatProperty(@NotNull String name) {
this.name = name;
}

@NotNull
@Override
public String getName() {
return this.name;
}

@Override
public boolean isValid(Float value) {
return true;
}

@NotNull
@Override
public Class<Float> getType() {
return Float.class;
}

@Override
public String valueToString(@NotNull Float value) {
return value.toString();
}
}
37 changes: 37 additions & 0 deletions src/main/java/gregtech/api/block/UnlistedPropertyMaterial.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package gregtech.api.block;

import gregtech.api.unification.material.Material;

import net.minecraftforge.common.property.IUnlistedProperty;

import org.jetbrains.annotations.NotNull;

public class UnlistedPropertyMaterial implements IUnlistedProperty<Material> {

private final String name;

public UnlistedPropertyMaterial(@NotNull String name) {
this.name = name;
}

@NotNull
@Override
public String getName() {
return name;
}

@Override
public boolean isValid(Material value) {
return true;
}

@Override
public Class<Material> getType() {
return Material.class;
}

@Override
public String valueToString(Material value) {
return value.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import gregtech.api.block.UnlistedStringProperty;
import gregtech.api.cover.Cover;
import gregtech.api.cover.IFacadeCover;
import gregtech.api.graphnet.pipenetold.IBlockAppearance;
import gregtech.api.items.toolitem.ToolClasses;
import gregtech.api.items.toolitem.ToolHelper;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.MetaTileEntityHolder;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.metatileentity.multiblock.MultiblockControllerBase;
import gregtech.api.pipenet.IBlockAppearance;
import gregtech.api.util.GTUtility;
import gregtech.api.util.Mods;
import gregtech.client.renderer.handler.MetaTileEntityRenderer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@
import gregtech.api.GregTechAPI;
import gregtech.api.metatileentity.ITieredMetaTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.pipenet.block.BlockPipe;
import gregtech.api.pipenet.tile.IPipeTile;
import gregtech.api.util.GTUtility;
import gregtech.api.util.LocalizationUtils;
import gregtech.client.utils.TooltipHelper;
import gregtech.common.ConfigHolder;
import gregtech.common.creativetab.GTCreativeTabs;

import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
Expand Down Expand Up @@ -91,20 +88,8 @@ public boolean placeBlockAt(@NotNull ItemStack stack, @NotNull EntityPlayer play
MetaTileEntity metaTileEntity = GTUtility.getMetaTileEntity(stack);
// prevent rendering glitch before meta tile entity sync to client, but after block placement
// set opaque property on the placing on block, instead during set of meta tile entity
boolean superVal = super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ,
return super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ,
newState.withProperty(BlockMachine.OPAQUE, metaTileEntity == null || metaTileEntity.isOpaqueCube()));
if (superVal && !world.isRemote) {
BlockPos possiblePipe = pos.offset(side.getOpposite());
Block block = world.getBlockState(possiblePipe).getBlock();
if (block instanceof BlockPipe) {
IPipeTile pipeTile = ((BlockPipe<?, ?, ?>) block).getPipeTileEntity(world, possiblePipe);
if (pipeTile != null && ((BlockPipe<?, ?, ?>) block).canPipeConnectToBlock(pipeTile, side.getOpposite(),
world.getTileEntity(pos))) {
pipeTile.setConnection(side, true, false);
}
}
}
return superVal;
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public static int assignId() {
public static final int UPDATE_FACADE_STACK = assignId();

// Pipe implementation update codes
public static final int UPDATE_INSULATION_COLOR = assignId();
public static final int UPDATE_PAINT = assignId();
public static final int UPDATE_CONNECTIONS = assignId();
public static final int SYNC_COVER_IMPLEMENTATION = assignId();
public static final int UPDATE_PIPE_TYPE = assignId();
Expand All @@ -68,9 +68,9 @@ public static int assignId() {
public static final int UPDATE_COVER_DATA_PIPE = assignId();
public static final int COVER_ATTACHED_PIPE = assignId();
public static final int COVER_REMOVED_PIPE = assignId();
public static final int PIPE_OPTICAL_ACTIVE = assignId();
public static final int PIPE_LASER_ACTIVE = assignId();
public static final int PIPE_ACTIVE = assignId();
public static final int CABLE_TEMPERATURE = assignId();
public static final int UPDATE_PIPE_LOGIC = assignId();

// Multiblock implementation update codes
public static final int SYNC_CONTROLLER = assignId();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gregtech.api.capability;

import gregtech.api.capability.data.IDataAccess;
import gregtech.api.capability.impl.AbstractRecipeLogic;
import gregtech.api.cover.CoverHolder;
import gregtech.api.metatileentity.multiblock.IMaintenance;
Expand Down Expand Up @@ -30,12 +31,9 @@ public class GregtechTileCapabilities {
@CapabilityInject(IMaintenance.class)
public static Capability<IMaintenance> CAPABILITY_MAINTENANCE = null;

@CapabilityInject(IDataAccessHatch.class)
public static Capability<IDataAccessHatch> CAPABILITY_DATA_ACCESS = null;
@CapabilityInject(IDataAccess.class)
public static Capability<IDataAccess> CAPABILITY_DATA_ACCESS = null;

@CapabilityInject(ILaserContainer.class)
public static Capability<ILaserContainer> CAPABILITY_LASER = null;

@CapabilityInject(IOpticalComputationProvider.class)
public static Capability<IOpticalComputationProvider> CABABILITY_COMPUTATION_PROVIDER = null;
@CapabilityInject(ILaserRelay.class)
public static Capability<ILaserRelay> CAPABILITY_LASER = null;
}
36 changes: 0 additions & 36 deletions src/main/java/gregtech/api/capability/IDataAccessHatch.java

This file was deleted.

14 changes: 9 additions & 5 deletions src/main/java/gregtech/api/capability/IEnergyContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@
public interface IEnergyContainer {

/**
* This method is basically {@link #changeEnergy(long)}, but it also handles amperes.
* This method is basically {@link #changeEnergy(long)}, but it also handles amperes and simulation.
* This method should always be used when energy is passed between blocks.
*
* @param voltage amount of energy packets (energy to add / input voltage)
* @param amperage packet size (energy to add / input amperage)
* @param voltage packet size (energy to add divided by input amperage)
* @param amperage amount of energy packets (energy to add divided by input voltage)
* @return amount of used amperes. 0 if not accepted anything.
*/
long acceptEnergyFromNetwork(EnumFacing side, long voltage, long amperage);
long acceptEnergyFromNetwork(EnumFacing side, long voltage, long amperage, boolean simulate);

default long acceptEnergyFromNetwork(EnumFacing side, long voltage, long amperage) {
M-W-K marked this conversation as resolved.
Show resolved Hide resolved
return acceptEnergyFromNetwork(side, voltage, amperage, false);
}

/**
* @return if this container accepts energy from the given side
Expand Down Expand Up @@ -123,7 +127,7 @@ default boolean isOneProbeHidden() {
IEnergyContainer DEFAULT = new IEnergyContainer() {

@Override
public long acceptEnergyFromNetwork(EnumFacing enumFacing, long l, long l1) {
public long acceptEnergyFromNetwork(EnumFacing side, long voltage, long amperage, boolean simulate) {
return 0;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
package gregtech.api.capability;

/**
* It is its own separate interface to make piping work easier
*/
public interface ILaserContainer extends IEnergyContainer {}
public interface ILaserContainer extends ILaserRelay, IEnergyContainer {}
13 changes: 13 additions & 0 deletions src/main/java/gregtech/api/capability/ILaserRelay.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package gregtech.api.capability;

public interface ILaserRelay {

/**
* Receive a laser pulse.
*
* @param laserVoltage the voltage of the laser.
* @param laserAmperage the amperage of the laser.
* @return how much amperage was received.
*/
long receiveLaser(long laserVoltage, long laserAmperage);
}

This file was deleted.

This file was deleted.

Loading