Git Product home page Git Product logo

aequivaleo's People

Contributors

amoooooo avatar marchermans avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

aequivaleo's Issues

Is it normal that the FPS drops to a screeching halt every time I load a world?

I was told to redirect the issue here, MercuriusXeno/Goo#122
MC 1.16.5
Forge 36.2.2
GraalVM Java8

Everytime I load a world, the FPS drops to literal 0 for quite some time (it takes really long) before returning to normal. Looking at the console, somehow aequivaleo and goo are trying to "scan" every single dimension present. It does not matter if the world is previously saved or is just a newly created worldJust wanna ask if this is normal behavior or is there something probably wrong?
This is an extremely large modpack, but still, I find it somewhat absurd that loading every world would require a full 20 minute hiccup before I can actually start playing.

Console logs (only showing the point where aequivaleo tries to scan every dimension):
https://gist.github.com/Cynix32/2a5750c055062106b396c4ef0010fc51

Using double for compound values.

At the moment it looks like the analyzer and compound values are hard coded to be double.

I consider this somewhat risky, as some Minecraft players and mods LOVE huge numbers, which might result in weird float arithmetic errors down the line when adding small numbers to big numbers (which might be an interesting game mechanic on its own, but is probably not desired here).

I'd prefer something like BigFraction. So I'd recommend to not have it hard coded, but allow for the number type to be changeable without rewriting everything.

Renaming of API methods for greater clarity

  • IResultsInformationCache and all methods deprecated and made to extend IEquivalencyResults
  • IEquivalencyResults having methods dataFor as replacement for getFor
  • IEquivalencyResults having methods mappedDataFor as replacement for getCacheFor
  • IEquivalencyResults having method getAllMappedDataOf as replacement for getAllCachedDataOf
  • IAequivaleoAPI having method getResultsInformationCache deprecated
  • IAequivaleoAPI new method public IEquivalencyResults getEquivalencyResults
  • ICompoundTypeGroup having methods convertToCacheEntry deprecated in favor of mapEntry

Testability of the analyzer

I wanted to play around with the analyzer algorithm and maybe write some tests to see how it works, but I found it very hard (=impossible for me) to run it in isolation.

I could replace the World-Object with a RegistryKey<World>-Object, which was easier to create in a Test, but ran into other issues then, that indicated I somehow need to initialize forge, which is outside of my comfort zone right now, as I'm a bit rusty in Minecraft programming.

I think it would be a little easier if the JGraphTBasedCompoundAnalyzer was instantiated with instances of ILockedCompoundInformationRegistry, etc. instead of requesting them on demand.
That would also save a lot of getInstance-Calls.

I think having junit tests makes it a lot easier and robust to develop an algorithm like this, as you can just keep coming up with new test setups and confirm the old tests still work as expected.

Deterministic collection instead of hashset for datagen order

Output produced by datagen can seed non-deterministic key value pairs [names unsorted, won't necessarily be in the same order when run twice] causing git to flag the file for deltas, and other minor reasons why this behavior is less desirable.

Orion already identified that a hashset was being used where a sorted set would nip this.

Issue ported from discord for convenience.

Can't gooify anything

I am running 1.16.4 modpack (Direwolf20 1.16 modpack with goo and aequivaleo added) with "aequivaleo-0.1.16-ALPHA" and "Goo-1.16.3-0.8.0.2" however no items are getting assigned values. The minecraft log is filled with "Failed to process recipe:" to the point I struggled to find a paste tool allowing the file to be accepted due to its size.
The log is in the attached archive:
debug-5.log.gz

The error.log file in aequivaleo folder is empty but there is a single archive with an error file which I've attached. After restarting minecraft I didn't get a new error so it may be unrelated.
2021-01-02-1.error.gz

Ingredient error logs are empty

When creating a new world with the Create minecraft mod installed, I see log lines such as:

[04Jul2021 20:44:56.106] [ForkJoinPool.commonPool-worker-2/ERROR] [com.ldtteam.aequivaleo.vanilla.VanillaAequivaleoPlugin/]: Failed to process recipe: create:splashing/ice See ingredient error logs for more information.

This informs me that I should check the logs\aequivaleo\ingredient\error.log file for further information, but that file is empty (exists but zero bytes).

Minecraft 1.16.5, Forge 36.1.32, launched via MultiMC 5 (0.6.12-1530)

Mod list:

aequivaleo-0.1.35-ALPHA-universal.jar # aequivaleo
appleskin-forge-mc1.16.x-2.0.0.jar
create-mc1.16.5_v0.3.1c.jar
FastLeafDecay-v25.jar
Goo-1.16.5-0.8.3.8.jar                # goo
gravestone-1.16.5-1.0.6.jar
inventorysorter-1.16.1-18.1.0.jar
jei-1.16.5-7.7.0.107.jar
JustEnoughResources-1.16.5-0.12.1.121.jar
Patchouli-1.16.4-53.1.jar
StorageDrawers-1.16.3-8.2.2.jar
theoneprobe-1.16-3.1.4.jar
Xaeros_Minimap_21.12.2_Forge_1.16.5.jar
XaerosWorldMap_1.14.4_Forge_1.16.5.jar

Please find attached the debug.log and latest.log.

Memory Leak with Mine Colonies

When Aequivaleo aequivaleo-1.18.2-0.1.94-ALPHA-universal is run with Mine Colonies, there's a memory leak that will eventually consume all available allocated RAM. (I have 8GB allocated, and it will use all of that until java crashes.)

If I remove Aequivaleo, memory usage returns to normal.

From the Java Memory Analyzer tool:
Thread Stack Aequivaleo analysis runner: 1 at java.util.ArrayList.indexOfRange(Ljava/lang/Object;II)I (ArrayList.java:298) at java.util.ArrayList.indexOf(Ljava/lang/Object;)I (ArrayList.java:286) at java.util.ArrayList.contains(Ljava/lang/Object;)Z (ArrayList.java:275) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:172) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.circuit(Ljava/lang/Integer;I)Z (HawickJamesSimpleCycles.java:158) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.analyzeCircuits()V (HawickJamesSimpleCycles.java:288) at com.ldtteam.shaded.jgrapht.alg.cycle.HawickJamesSimpleCycles.findSimpleCycles()Ljava/util/List; (HawickJamesSimpleCycles.java:234) at com.ldtteam.aequivaleo.analysis.jgrapht.cycles.JGraphTCyclesReducer.reduceOnce(Lcom/ldtteam/shaded/jgrapht/Graph;)Z (JGraphTCyclesReducer.java:56) at com.ldtteam.aequivaleo.analysis.jgrapht.cycles.JGraphTCyclesReducer.reduce(Lcom/ldtteam/shaded/jgrapht/Graph;)V (JGraphTCyclesReducer.java:47) at com.ldtteam.aequivaleo.analysis.JGraphTBasedCompoundAnalyzer.reduceGraph(Lcom/ldtteam/aequivaleo/analysis/jgrapht/aequivaleo/IGraph;Lcom/ldtteam/aequivaleo/analysis/jgrapht/node/SourceNode;)Lcom/ldtteam/aequivaleo/analysis/jgrapht/aequivaleo/IGraph; (JGraphTBasedCompoundAnalyzer.java:241) at com.ldtteam.aequivaleo.analysis.JGraphTBasedCompoundAnalyzer.calculate()V (JGraphTBasedCompoundAnalyzer.java:289) at com.ldtteam.aequivaleo.analysis.JGraphTBasedCompoundAnalyzer.calculateAndGet()Ljava/util/Map; (JGraphTBasedCompoundAnalyzer.java:431) at com.ldtteam.aequivaleo.analysis.AequivaleoReloadListener$AequivaleoWorldAnalysisRunner.reloadEquivalencyData()V (AequivaleoReloadListener.java:692) at com.ldtteam.aequivaleo.analysis.AequivaleoReloadListener$AequivaleoWorldAnalysisRunner.run()V (AequivaleoReloadListener.java:647) at java.util.concurrent.CompletableFuture$AsyncRun.run()V (CompletableFuture.java:1804) at java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V (ThreadPoolExecutor.java:1136) at java.util.concurrent.ThreadPoolExecutor$Worker.run()V (ThreadPoolExecutor.java:635) at java.lang.Thread.run()V (Thread.java:833)

API Method for determing processing state of graph

Probably ideal as a single unsided method, having states akin to:

  • Uninitialized
  • Processing
  • Waiting?
  • Completed
  • Errored?

At minimum there is a need to distinguish between having no data available, processing data, and data being available; on both Server and Client.

Comparability of compound value sets

How do you plan to make compound value sets comparable?
I think for the analysis to work and not result in immediate exploits it always has to choose the smallest value when there are multiple options. But "smallest value" is not really defined, when you have a vector of values and there's an infinite ways to define it.

E.g. compare weighted sum, distance to 0, compare compounds in a specific order, choose the minimum for each compound type independently, ...

I think at the moment this problem is avoided by just always using the first calculated value, but from my experience this will not always find the smallest number and makes the analyzer recipe-order dependent.

Fluid Values Not Propagating To Fluid Containers

An itemstack container (such as a bucket) can contain a fluidstack.

You can generate values for the fluids, and the container item, but Aequivaleo doesn't see the relationship between a bucket, BUCKET_VOLUME of a fluid (like water), and a water bucket (the product of those two things).

At the moment you can teach it these relationships manually, either by directly giving the items a hand-crafted value, or by registering a recipe type and supplementing those compound types.

If we could take this a step further, and make Aeq innately aware that buckets can contain fluids, Aeq could infer the value of liquid-and-container combos automatically.

I'm not certain this should extend to all FluidHandlers; I think ideally this wouldn't affect complex handlers like custom mod tanks; strictly bucket-items that have a non-variable quantity of liquid as part of their identity as an item (buckets being a prime example). Probably needs more thought/discussion. Feel free to ping me if this needs better wording.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.