From 8d215e3911f83a0f542908b709952aff1e365f8c Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Wed, 18 Feb 2026 15:08:55 -0500 Subject: [PATCH] V --- build.gradle.kts | 40 +- core/agent/build.gradle.kts | 4 +- .../art/arcane/iris/util/agent/Installer.java | 2 +- core/build.gradle.kts | 2 +- core/src/main/java/art/arcane/iris/Iris.java | 20 +- .../art/arcane/iris/core/IrisSettings.java | 4 +- .../java/art/arcane/iris/core/IrisWorlds.java | 2 +- .../arcane/iris/core/ServerConfigurator.java | 8 +- .../iris/core/commands/CommandDeveloper.java | 20 +- .../iris/core/commands/CommandEdit.java | 4 +- .../iris/core/commands/CommandFind.java | 6 +- .../iris/core/commands/CommandIris.java | 22 +- .../iris/core/commands/CommandJigsaw.java | 8 +- .../iris/core/commands/CommandLazyPregen.java | 4 +- .../iris/core/commands/CommandObject.java | 12 +- .../iris/core/commands/CommandPregen.java | 4 +- .../iris/core/commands/CommandSettings.java | 2 +- .../iris/core/commands/CommandStudio.java | 24 +- .../core/commands/CommandTurboPregen.java | 4 +- .../iris/core/commands/CommandUpdater.java | 4 +- .../iris/core/commands/CommandWhat.java | 8 +- .../arcane/iris/core/edit/BlockSignal.java | 4 +- .../arcane/iris/core/edit/DustRevealer.java | 4 +- .../arcane/iris/core/edit/JigsawEditor.java | 2 +- .../iris/core/events/IrisLootEvent.java | 2 +- .../iris/core/gui/NoiseExplorerGUI.java | 8 +- .../arcane/iris/core/gui/PregeneratorJob.java | 2 +- .../art/arcane/iris/core/gui/VisionGUI.java | 4 +- .../core/gui/components/IrisRenderer.java | 2 +- .../core/link/CustomItemsDataProvider.java | 4 +- .../iris/core/link/ExternalDataProvider.java | 2 +- .../iris/core/link/FoliaWorldsLink.java | 2 +- .../core/link/data/EcoItemsDataProvider.java | 2 +- .../core/link/data/HMCLeavesDataProvider.java | 6 +- .../core/link/data/ItemAdderDataProvider.java | 2 +- .../link/data/KGeneratorsDataProvider.java | 4 +- .../core/link/data/MMOItemsDataProvider.java | 2 +- .../link/data/MythicCrucibleDataProvider.java | 4 +- .../iris/core/link/data/NexoDataProvider.java | 4 +- .../art/arcane/iris/core/loader/IrisData.java | 12 +- .../iris/core/loader/IrisRegistrant.java | 2 +- .../iris/core/loader/ResourceLoader.java | 8 +- .../java/art/arcane/iris/core/nms/INMS.java | 38 +- .../art/arcane/iris/core/pack/IrisPack.java | 2 +- .../iris/core/pack/IrisPackRepository.java | 8 +- .../iris/core/pregenerator/ChunkUpdater.java | 6 +- .../pregenerator/DeepSearchPregenerator.java | 4 +- .../core/pregenerator/IrisPregenerator.java | 4 +- .../core/pregenerator/LazyPregenerator.java | 4 +- .../core/pregenerator/TurboPregenerator.java | 10 +- .../methods/AsyncPregenMethod.java | 4 +- .../methods/MedievalPregenMethod.java | 2 +- .../arcane/iris/core/project/IrisProject.java | 10 +- .../iris/core/project/SchemaBuilder.java | 4 +- .../arcane/iris/core/service/BoardSVC.java | 6 +- .../arcane/iris/core/service/CommandSVC.java | 14 +- .../iris/core/service/ConversionSVC.java | 8 +- .../art/arcane/iris/core/service/EditSVC.java | 4 +- .../iris/core/service/ExternalDataSVC.java | 4 +- .../iris/core/service/GlobalCacheSVC.java | 2 +- .../iris/core/service/IrisEngineSVC.java | 10 +- .../core/service/IrisIntegrationService.java | 2 +- .../iris/core/service/LogFilterSVC.java | 2 +- .../arcane/iris/core/service/ObjectSVC.java | 4 +- .../iris/core/service/PreservationSVC.java | 4 +- .../arcane/iris/core/service/StudioSVC.java | 6 +- .../art/arcane/iris/core/service/TreeSVC.java | 6 +- .../art/arcane/iris/core/service/WandSVC.java | 16 +- .../arcane/iris/core/tools/IrisConverter.java | 6 +- .../arcane/iris/core/tools/IrisCreator.java | 12 +- .../iris/core/tools/IrisPackBenchmarking.java | 2 +- .../iris/core/tools/IrisReflectiveAPI.java | 2 +- .../arcane/iris/core/tools/IrisToolbelt.java | 4 +- .../arcane/iris/core/wand/WandSelection.java | 2 +- .../art/arcane/iris/engine/IrisComplex.java | 12 +- .../art/arcane/iris/engine/IrisEngine.java | 10 +- .../arcane/iris/engine/IrisEngineMantle.java | 8 +- .../arcane/iris/engine/IrisWorldManager.java | 10 +- .../engine/actuator/IrisBiomeActuator.java | 4 +- .../engine/actuator/IrisDecorantActuator.java | 4 +- .../actuator/IrisTerrainNormalActuator.java | 4 +- .../engine/data/chunk/LinkedTerrainChunk.java | 2 +- .../engine/data/chunk/MCATerrainChunk.java | 6 +- .../decorator/IrisCeilingDecorator.java | 2 +- .../engine/decorator/IrisEngineDecorator.java | 4 +- .../decorator/IrisSeaFloorDecorator.java | 2 +- .../decorator/IrisSeaSurfaceDecorator.java | 2 +- .../decorator/IrisShoreLineDecorator.java | 2 +- .../decorator/IrisSurfaceDecorator.java | 4 +- .../arcane/iris/engine/framework/Engine.java | 26 +- .../iris/engine/framework/EngineActuator.java | 4 +- .../framework/EngineAssignedActuator.java | 4 +- .../framework/EngineAssignedBiModifier.java | 2 +- .../framework/EngineAssignedModifier.java | 4 +- .../framework/EngineAssignedWorldManager.java | 36 +- .../engine/framework/EngineBiModifier.java | 2 +- .../engine/framework/EngineComponent.java | 2 +- .../engine/framework/EngineDecorator.java | 4 +- .../iris/engine/framework/EngineMode.java | 12 +- .../iris/engine/framework/EngineModifier.java | 4 +- .../iris/engine/framework/EnginePlayer.java | 2 +- .../iris/engine/framework/EngineStage.java | 4 +- .../iris/engine/framework/EngineTarget.java | 2 +- .../arcane/iris/engine/framework/Locator.java | 14 +- .../engine/framework/PregeneratedData.java | 4 +- .../iris/engine/framework/ResultLocator.java | 4 +- .../iris/engine/framework/SeedManager.java | 2 +- .../framework/placer/WorldObjectPlacer.java | 4 +- .../iris/engine/jigsaw/PlannedPiece.java | 2 +- .../iris/engine/jigsaw/PlannedStructure.java | 2 +- .../iris/engine/mantle/EngineMantle.java | 8 +- .../iris/engine/mantle/MantleComponent.java | 4 +- .../iris/engine/mantle/MantleWriter.java | 10 +- .../components/MantleCarvingComponent.java | 2 +- .../components/MantleFluidBodyComponent.java | 2 +- .../components/MantleJigsawComponent.java | 4 +- .../components/MantleObjectComponent.java | 12 +- .../iris/engine/mode/ModeOverworld.java | 2 +- .../engine/modifier/IrisCarveModifier.java | 6 +- .../engine/modifier/IrisCustomModifier.java | 10 +- .../engine/modifier/IrisDepositModifier.java | 8 +- .../modifier/IrisPerfectionModifier.java | 8 +- .../engine/modifier/IrisPostModifier.java | 6 +- .../art/arcane/iris/engine/object/IRare.java | 4 +- .../arcane/iris/engine/object/IrisBiome.java | 8 +- .../engine/object/IrisBiomeGeneratorLink.java | 4 +- .../engine/object/IrisBiomePaletteLayer.java | 2 +- .../iris/engine/object/IrisBlockData.java | 4 +- .../arcane/iris/engine/object/IrisCave.java | 4 +- .../iris/engine/object/IrisCaveShape.java | 2 +- .../iris/engine/object/IrisCommand.java | 2 +- .../arcane/iris/engine/object/IrisCompat.java | 4 +- .../object/IrisCompatabilityBlockFilter.java | 2 +- .../object/IrisCompatabilityItemFilter.java | 2 +- .../iris/engine/object/IrisDecorator.java | 2 +- .../iris/engine/object/IrisDimension.java | 6 +- .../arcane/iris/engine/object/IrisEffect.java | 2 +- .../engine/object/IrisEngineStreamType.java | 2 +- .../arcane/iris/engine/object/IrisEntity.java | 10 +- .../iris/engine/object/IrisEntitySpawn.java | 4 +- .../iris/engine/object/IrisExpression.java | 6 +- .../engine/object/IrisExpressionLoad.java | 4 +- .../iris/engine/object/IrisGenerator.java | 6 +- .../engine/object/IrisGeneratorStyle.java | 8 +- .../arcane/iris/engine/object/IrisImage.java | 2 +- .../iris/engine/object/IrisImageMap.java | 4 +- .../iris/engine/object/IrisInterpolator.java | 4 +- .../engine/object/IrisInterpolator3D.java | 4 +- .../iris/engine/object/IrisJigsawPiece.java | 2 +- .../iris/engine/object/IrisJigsawPool.java | 2 +- .../engine/object/IrisJigsawStructure.java | 2 +- .../arcane/iris/engine/object/IrisLoot.java | 6 +- .../iris/engine/object/IrisLootReference.java | 2 +- .../iris/engine/object/IrisLootTable.java | 2 +- .../arcane/iris/engine/object/IrisMarker.java | 2 +- .../engine/object/IrisMaterialPalette.java | 2 +- .../arcane/iris/engine/object/IrisMod.java | 2 +- .../engine/object/IrisNoiseGenerator.java | 4 +- .../arcane/iris/engine/object/IrisObject.java | 22 +- .../engine/object/IrisObjectPlacement.java | 6 +- .../iris/engine/object/IrisObjectReplace.java | 2 +- .../iris/engine/object/IrisOreGenerator.java | 2 +- .../arcane/iris/engine/object/IrisRavine.java | 4 +- .../arcane/iris/engine/object/IrisRegion.java | 6 +- .../arcane/iris/engine/object/IrisScript.java | 2 +- .../iris/engine/object/IrisSpawner.java | 2 +- .../engine/object/IrisStructurePopulator.java | 2 +- .../iris/engine/object/IrisStyledRange.java | 4 +- .../arcane/iris/engine/object/IrisWorm.java | 2 +- .../iris/engine/object/LegacyTileData.java | 2 +- .../arcane/iris/engine/object/NoiseStyle.java | 8 +- .../object/matter/IrisMatterObject.java | 4 +- .../engine/platform/BukkitChunkGenerator.java | 6 +- .../platform/PlatformChunkGenerator.java | 2 +- .../iris/util/common/board/BoardEntry.java | 2 +- .../iris/util/common/board/BoardSettings.java | 2 +- .../util/common/board/ScoreDirection.java | 2 +- .../art/arcane/iris/util/common/data/B.java | 4 +- .../iris/util/common/data/BiomeMap.java | 2 +- .../iris/util/common/data/DataProvider.java | 2 +- .../iris/util/common/data/IrisCustomData.java | 2 +- .../iris/util/common/data/VectorMap.java | 2 +- .../util/common/data/palette/BitStorage.java | 2 +- .../common/data/palette/CountConsumer.java | 2 +- .../CrudeIncrementalIntIdentityHashBiMap.java | 2 +- .../common/data/palette/GlobalPalette.java | 2 +- .../common/data/palette/HashMapPalette.java | 2 +- .../iris/util/common/data/palette/IdMap.java | 2 +- .../util/common/data/palette/IdMapper.java | 2 +- .../common/data/palette/LinearPalette.java | 2 +- .../iris/util/common/data/palette/Mth.java | 2 +- .../util/common/data/palette/Palette.java | 2 +- .../common/data/palette/PaletteAccess.java | 2 +- .../common/data/palette/PaletteResize.java | 2 +- .../util/common/data/palette/PaletteType.java | 2 +- .../data/palette/PalettedContainer.java | 2 +- .../util/common/data/palette/QuartPos.java | 2 +- .../util/common/data/registry/Attributes.java | 2 +- .../common/data/registry/KeyedRegistry.java | 2 +- .../util/common/data/registry/Materials.java | 4 +- .../util/common/data/registry/Particles.java | 4 +- .../data/registry/RegistryTypeAdapter.java | 2 +- .../common/data/registry/RegistryUtil.java | 4 +- .../util/common/director/DirectorContext.java | 4 +- .../director/DirectorContextHandler.java | 6 +- .../common/director/DirectorExecutor.java | 4 +- .../director/DirectorParameterHandler.java | 2 +- .../util/common/director/DirectorSystem.java | 4 +- .../director/context/BiomeContextHandler.java | 6 +- .../context/DimensionContextHandler.java | 6 +- .../context/GeneratorContextHandler.java | 6 +- .../context/RegionContextHandler.java | 6 +- .../context/VectorContextHandler.java | 6 +- .../director/context/WorldContextHandler.java | 6 +- .../director/handlers/BiomeHandler.java | 4 +- .../director/handlers/BlockVectorHandler.java | 6 +- .../director/handlers/BooleanHandler.java | 2 +- .../common/director/handlers/ByteHandler.java | 2 +- .../common/director/handlers/CaveHandler.java | 4 +- .../director/handlers/DataVersionHandler.java | 2 +- .../director/handlers/DimensionHandler.java | 4 +- .../director/handlers/DoubleHandler.java | 2 +- .../director/handlers/EntityHandler.java | 4 +- .../director/handlers/FloatHandler.java | 2 +- .../director/handlers/GeneratorHandler.java | 4 +- .../director/handlers/IntegerHandler.java | 2 +- .../director/handlers/JigsawPieceHandler.java | 4 +- .../director/handlers/JigsawPoolHandler.java | 4 +- .../handlers/JigsawStructureHandler.java | 4 +- .../common/director/handlers/LongHandler.java | 2 +- .../director/handlers/PlayerHandler.java | 2 +- .../director/handlers/RegionHandler.java | 4 +- .../director/handlers/ScriptHandler.java | 4 +- .../director/handlers/ShortHandler.java | 2 +- .../director/handlers/StringHandler.java | 2 +- .../director/handlers/VectorHandler.java | 6 +- .../director/handlers/WorldHandler.java | 2 +- .../specialhandlers/DummyHandler.java | 2 +- .../NullableDimensionHandler.java | 2 +- .../NullablePlayerHandler.java | 4 +- .../specialhandlers/ObjectHandler.java | 4 +- .../specialhandlers/RegistrantHandler.java | 4 +- .../art/arcane/iris/util/common/format/C.java | 4 +- .../common/inventorygui/ElementEvent.java | 2 +- .../inventorygui/UIStaticDecorator.java | 2 +- .../common/inventorygui/UIVoidDecorator.java | 2 +- .../iris/util/common/inventorygui/Window.java | 2 +- .../common/inventorygui/WindowResolution.java | 2 +- .../iris/util/common/math/AxisAlignedBB.java | 2 +- .../iris/util/common/math/Direction.java | 2 +- .../arcane/iris/util/common/math/RNGV2.java | 2 +- .../iris/util/common/math/Vector3i.java | 2 +- .../iris/util/common/math/VectorMath.java | 2 +- .../iris/util/common/misc/Bindings.java | 13 +- .../iris/util/common/misc/RegenRuntime.java | 2 +- .../util/common/misc/ServerProperties.java | 2 +- .../arcane/iris/util/common/misc/SlimJar.java | 2 +- .../iris/util/common/misc/getHardware.java | 4 +- .../iris/util/common/nbt/mca/Chunk.java | 2 +- .../iris/util/common/nbt/mca/MCAFile.java | 4 +- .../iris/util/common/nbt/mca/MCAUtil.java | 2 +- .../iris/util/common/nbt/mca/NBTWorld.java | 6 +- .../iris/util/common/nbt/mca/Section.java | 2 +- .../util/common/parallel/BurstExecutor.java | 2 +- .../util/common/parallel/BurstedHunk.java | 4 +- .../iris/util/common/parallel/GridLock.java | 2 +- .../iris/util/common/parallel/HyperLock.java | 2 +- .../iris/util/common/parallel/MultiBurst.java | 2 +- .../util/common/parallel/NOOPGridLock.java | 2 +- .../util/common/parallel/StreamUtils.java | 2 +- .../util/common/parallel/SyncExecutor.java | 2 +- .../iris/util/common/plugin/Chunks.java | 2 +- .../iris/util/common/plugin/Command.java | 4 +- .../iris/util/common/plugin/CommandDummy.java | 2 +- .../iris/util/common/plugin/Control.java | 2 +- .../iris/util/common/plugin/Controller.java | 2 +- .../iris/util/common/plugin/ICommand.java | 2 +- .../iris/util/common/plugin/IController.java | 2 +- .../iris/util/common/plugin/Instance.java | 2 +- .../iris/util/common/plugin/IrisService.java | 2 +- .../util/common/plugin/MortarCommand.java | 4 +- .../util/common/plugin/MortarPermission.java | 2 +- .../iris/util/common/plugin/Permission.java | 2 +- .../util/common/plugin/PluginRegistry.java | 2 +- .../common/plugin/PluginRegistryGroup.java | 2 +- .../util/common/plugin/RouterCommand.java | 2 +- .../util/common/plugin/VirtualCommand.java | 6 +- .../iris/util/common/plugin/VolmitPlugin.java | 8 +- .../iris/util/common/plugin/VolmitSender.java | 6 +- .../common/plugin/chunk/ChunkTickets.java | 2 +- .../common/plugin/chunk/TicketHolder.java | 2 +- .../iris/util/common/reflect/KeyedType.java | 6 +- .../iris/util/common/reflect/OldEnum.java | 2 +- .../arcane/iris/util/common/reflect/W.java | 2 +- .../util/common/reflect/WrappedField.java | 2 +- .../reflect/WrappedReturningMethod.java | 2 +- .../arcane/iris/util/common/scheduling/J.java | 4 +- .../common/scheduling/jobs/DownloadJob.java | 2 +- .../iris/util/common/scheduling/jobs/Job.java | 8 +- .../common/scheduling/jobs/JobCollection.java | 2 +- .../scheduling/jobs/ParallelQueueJob.java | 6 +- .../scheduling/jobs/ParallelRadiusJob.java | 4 +- .../util/common/scheduling/jobs/QueueJob.java | 2 +- .../common/scheduling/jobs/SingleJob.java | 2 +- .../arcane/iris/util/project/agent/Agent.java | 4 +- .../util/project/context/IrisContext.java | 2 +- .../arcane/iris/util/project/hunk/Hunk.java | 16 +- .../iris/util/project/hunk/HunkFace.java | 2 +- .../util/project/hunk/SharedHunkAdapter.java | 2 +- .../util/project/hunk/storage/ArrayHunk.java | 4 +- .../hunk/storage/AtomicDoubleHunk.java | 4 +- .../util/project/hunk/storage/AtomicHunk.java | 4 +- .../hunk/storage/AtomicIntegerHunk.java | 4 +- .../project/hunk/storage/AtomicLongHunk.java | 4 +- .../project/hunk/storage/PaletteOrHunk.java | 4 +- .../project/hunk/storage/StorageHunk.java | 4 +- .../hunk/storage/SynchronizedArrayHunk.java | 4 +- .../hunk/view/BiomeGridHunkHolder.java | 4 +- .../project/hunk/view/BiomeGridHunkView.java | 4 +- .../project/hunk/view/ChunkBiomeHunkView.java | 4 +- .../hunk/view/ChunkDataHunkHolder.java | 4 +- .../project/hunk/view/ChunkDataHunkView.java | 8 +- .../util/project/hunk/view/ChunkHunkView.java | 4 +- .../interpolation/InterpolationMethod.java | 2 +- .../interpolation/InterpolationMethod3D.java | 2 +- .../interpolation/InterpolationType.java | 2 +- .../interpolation/IrisInterpolation.java | 6 +- .../project/matter/IrisMatterSupport.java | 11 +- .../iris/util/project/matter/TileWrapper.java | 2 +- .../iris/util/project/matter/WorldMatter.java | 2 +- .../project/matter/slices/EntityMatter.java | 2 +- .../matter/slices/IdentifierMatter.java | 2 +- .../project/matter/slices/RegistryMatter.java | 4 +- .../project/matter/slices/SpawnerMatter.java | 2 +- .../project/matter/slices/TileMatter.java | 5 +- .../arcane/iris/util/project/noise/CNG.java | 10 +- .../iris/util/project/noise/CNGFactory.java | 2 +- .../iris/util/project/noise/CachedNoise.java | 2 +- .../util/project/noise/CachedNoiseMap.java | 2 +- .../util/project/noise/CellGenerator.java | 2 +- .../util/project/noise/CellHeightNoise.java | 2 +- .../util/project/noise/CellularNoise.java | 2 +- .../iris/util/project/noise/CloverNoise.java | 2 +- .../iris/util/project/noise/CubicNoise.java | 2 +- .../util/project/noise/ExpressionNoise.java | 2 +- .../iris/util/project/noise/FastNoise.java | 4 +- .../util/project/noise/FastNoiseDouble.java | 2 +- .../iris/util/project/noise/FlatNoise.java | 2 +- .../noise/FractalBillowPerlinNoise.java | 4 +- .../noise/FractalBillowSimplexNoise.java | 4 +- .../util/project/noise/FractalCubicNoise.java | 4 +- .../project/noise/FractalFBMSimplexNoise.java | 4 +- .../noise/FractalRigidMultiSimplexNoise.java | 4 +- .../iris/util/project/noise/GlobNoise.java | 2 +- .../iris/util/project/noise/ImageNoise.java | 2 +- .../util/project/noise/InterpolatedNoise.java | 6 +- .../iris/util/project/noise/NoiseFactory.java | 2 +- .../util/project/noise/NoiseGenerator.java | 6 +- .../iris/util/project/noise/NoiseType.java | 4 +- .../iris/util/project/noise/OctaveNoise.java | 2 +- .../project/noise/OffsetNoiseGenerator.java | 2 +- .../iris/util/project/noise/PerlinNoise.java | 2 +- .../project/noise/RarityCellGenerator.java | 2 +- .../iris/util/project/noise/SimplexNoise.java | 2 +- .../util/project/noise/VascularNoise.java | 2 +- .../iris/util/project/noise/WhiteNoise.java | 2 +- .../util/project/profile/LoadBalancer.java | 2 +- .../util/project/profile/MsptTimings.java | 4 +- .../iris/util/project/sentry/Attachments.java | 2 +- .../iris/util/project/sentry/IrisLogger.java | 2 +- .../iris/util/project/sentry/ServerID.java | 2 +- .../iris/util/project/stream/BasicStream.java | 2 +- .../util/project/stream/ProceduralStream.java | 20 +- .../stream/arithmetic/AddingStream.java | 6 +- .../stream/arithmetic/ClampedStream.java | 6 +- .../CoordinateBitShiftLeftStream.java | 6 +- .../CoordinateBitShiftRightStream.java | 6 +- .../stream/arithmetic/DividingStream.java | 6 +- .../stream/arithmetic/FittedStream.java | 6 +- .../stream/arithmetic/MaxingStream.java | 6 +- .../stream/arithmetic/MinningStream.java | 6 +- .../stream/arithmetic/ModuloStream.java | 6 +- .../stream/arithmetic/MultiplyingStream.java | 6 +- .../stream/arithmetic/OffsetStream.java | 6 +- .../stream/arithmetic/RadialStream.java | 6 +- .../arithmetic/RoundingDoubleStream.java | 6 +- .../stream/arithmetic/SlopeStream.java | 6 +- .../stream/arithmetic/SubtractingStream.java | 6 +- .../project/stream/arithmetic/ZoomStream.java | 6 +- .../convert/AwareConversionStream2D.java | 6 +- .../convert/AwareConversionStream3D.java | 6 +- .../convert/CachedConversionStream.java | 4 +- .../stream/convert/ConversionStream.java | 4 +- .../stream/convert/ForceDoubleStream.java | 6 +- .../stream/convert/RoundingStream.java | 6 +- .../stream/convert/SelectionStream.java | 6 +- .../stream/convert/SignificanceStream.java | 6 +- .../project/stream/convert/To3DStream.java | 6 +- .../stream/interpolation/BiHermiteStream.java | 8 +- .../interpolation/BiStarcastStream.java | 6 +- .../stream/interpolation/BicubicStream.java | 8 +- .../stream/interpolation/BilinearStream.java | 8 +- .../stream/interpolation/Interpolated.java | 4 +- .../interpolation/InterpolatingStream.java | 10 +- .../stream/interpolation/Interpolator.java | 4 +- .../interpolation/InterpolatorFactory.java | 6 +- .../interpolation/TriHermiteStream.java | 8 +- .../interpolation/TriStarcastStream.java | 6 +- .../stream/interpolation/TricubicStream.java | 8 +- .../stream/interpolation/TrilinearStream.java | 8 +- .../project/stream/sources/CNGStream.java | 6 +- .../stream/sources/FunctionStream.java | 6 +- .../stream/utility/CachedStream2D.java | 6 +- .../stream/utility/CachedStream3D.java | 6 +- .../utility/ContextInjectingStream.java | 10 +- .../stream/utility/NullSafeStream.java | 6 +- .../stream/utility/ProfiledStream.java | 6 +- .../stream/utility/SemaphoreStream.java | 6 +- .../stream/utility/SynchronizedStream.java | 6 +- .../project/stream/utility/WasteDetector.java | 6 +- .../arcane/iris/util/project/uniques/U.java | 2 +- .../util/project/uniques/UBufferedImage.java | 2 +- .../iris/util/project/uniques/UFeature.java | 6 +- .../util/project/uniques/UFeatureMeta.java | 6 +- .../iris/util/project/uniques/UImage.java | 2 +- .../iris/util/project/uniques/UMeta.java | 2 +- .../util/project/uniques/UniqueRenderer.java | 16 +- .../uniques/features/UFInterpolator.java | 14 +- .../util/project/uniques/features/UFNOOP.java | 8 +- .../uniques/features/UFWarpedBackground.java | 10 +- .../uniques/features/UFWarpedCircle.java | 10 +- .../uniques/features/UFWarpedDisc.java | 10 +- .../uniques/features/UFWarpedDots.java | 10 +- .../uniques/features/UFWarpedLines.java | 10 +- .../iris/core/safeguard/IrisSafeguard.kt | 4 +- .../art/arcane/iris/core/safeguard/Mode.kt | 2 +- .../arcane/iris/core/safeguard/task/Tasks.kt | 7 +- .../safeguard/task/ValueWithDiagnostics.kt | 2 +- .../IrisSimpleExecutionEnvironment.kt | 2 +- .../iris/engine/mantle/MatterGenerator.kt | 8 +- .../iris/util/project/context/ChunkContext.kt | 4 +- .../util/project/context/ChunkedDataCache.kt | 4 +- gradle/libs.versions.toml | 2 +- .../core/nms/v1_20_R1/CustomBiomeSource.java | 169 ---- .../core/nms/v1_20_R1/IrisChunkGenerator.java | 420 --------- .../iris/core/nms/v1_20_R1/NMSBinding.java | 829 ----------------- .../core/nms/v1_20_R2/CustomBiomeSource.java | 168 ---- .../core/nms/v1_20_R2/IrisChunkGenerator.java | 420 --------- .../iris/core/nms/v1_20_R2/NMSBinding.java | 848 ----------------- .../core/nms/v1_20_R3/CustomBiomeSource.java | 168 ---- .../core/nms/v1_20_R3/IrisChunkGenerator.java | 420 --------- .../iris/core/nms/v1_20_R3/NMSBinding.java | 849 ----------------- .../core/nms/v1_20_R4/CustomBiomeSource.java | 168 ---- .../core/nms/v1_20_R4/IrisChunkGenerator.java | 419 --------- .../iris/core/nms/v1_20_R4/NMSBinding.java | 852 ----------------- .../core/nms/v1_21_R1/CustomBiomeSource.java | 168 ---- .../core/nms/v1_21_R1/IrisChunkGenerator.java | 420 --------- .../iris/core/nms/v1_21_R1/NMSBinding.java | 862 ------------------ .../core/nms/v1_21_R2/CustomBiomeSource.java | 168 ---- .../core/nms/v1_21_R2/IrisChunkGenerator.java | 420 --------- .../iris/core/nms/v1_21_R2/NMSBinding.java | 861 ----------------- .../core/nms/v1_21_R3/CustomBiomeSource.java | 169 ---- .../core/nms/v1_21_R3/IrisChunkGenerator.java | 450 --------- .../iris/core/nms/v1_21_R3/NMSBinding.java | 860 ----------------- .../core/nms/v1_21_R4/CustomBiomeSource.java | 169 ---- .../core/nms/v1_21_R4/IrisChunkGenerator.java | 449 --------- .../iris/core/nms/v1_21_R4/NMSBinding.java | 860 ----------------- .../core/nms/v1_21_R5/CustomBiomeSource.java | 169 ---- .../core/nms/v1_21_R5/IrisChunkGenerator.java | 449 --------- .../iris/core/nms/v1_21_R5/NMSBinding.java | 860 ----------------- .../core/nms/v1_21_R6/CustomBiomeSource.java | 169 ---- .../core/nms/v1_21_R6/IrisChunkGenerator.java | 449 --------- .../iris/core/nms/v1_21_R6/NMSBinding.java | 856 ----------------- .../core/nms/v1_21_R7/IrisChunkGenerator.java | 4 +- .../iris/core/nms/v1_21_R7/NMSBinding.java | 10 +- settings.gradle.kts | 10 - 476 files changed, 1031 insertions(+), 15617 deletions(-) delete mode 100644 nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/CustomBiomeSource.java delete mode 100644 nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/IrisChunkGenerator.java delete mode 100644 nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/NMSBinding.java delete mode 100644 nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/CustomBiomeSource.java delete mode 100644 nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/IrisChunkGenerator.java delete mode 100644 nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/NMSBinding.java delete mode 100644 nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/CustomBiomeSource.java delete mode 100644 nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/IrisChunkGenerator.java delete mode 100644 nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/NMSBinding.java delete mode 100644 nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/CustomBiomeSource.java delete mode 100644 nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/IrisChunkGenerator.java delete mode 100644 nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/NMSBinding.java delete mode 100644 nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/CustomBiomeSource.java delete mode 100644 nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/NMSBinding.java delete mode 100644 nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/CustomBiomeSource.java delete mode 100644 nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/NMSBinding.java delete mode 100644 nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/CustomBiomeSource.java delete mode 100644 nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/NMSBinding.java delete mode 100644 nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/CustomBiomeSource.java delete mode 100644 nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/NMSBinding.java delete mode 100644 nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/CustomBiomeSource.java delete mode 100644 nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/NMSBinding.java delete mode 100644 nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/CustomBiomeSource.java delete mode 100644 nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/IrisChunkGenerator.java delete mode 100644 nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/NMSBinding.java diff --git a/build.gradle.kts b/build.gradle.kts index 0d6e26f4d..beb8f6c2e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,5 @@ import de.undercouch.gradle.tasks.download.Download import org.gradle.jvm.toolchain.JavaLanguageVersion -import xyz.jpenilla.runpaper.task.RunServer import kotlin.system.exitProcess /* @@ -30,11 +29,10 @@ plugins { java `java-library` alias(libs.plugins.download) - alias(libs.plugins.runPaper) } group = "art.arcane" -version = "4.0.0-1.20.1-1.21.11-Dev1" +version = "4.0.0-1.21.11" val volmLibCoordinate: String = providers.gradleProperty("volmLibCoordinate") .orElse("com.github.VolmitSoftware:VolmLib:master-SNAPSHOT") .get() @@ -59,33 +57,15 @@ registerCustomOutputTaskUnix("PixelMac", "/Users/test/Desktop/mcserver/plugins") registerCustomOutputTaskUnix("CrazyDev22LT", "/home/julian/Desktop/server/plugins") // ============================================================== -val serverMinHeap = "10G" -val serverMaxHeap = "10G" -val additionalFlags = "-XX:+AlwaysPreTouch" -//Valid values are: none, truecolor, indexed256, indexed16, indexed8 -val color = "truecolor" -val errorReporting = "true" == findProperty("errorReporting") - val nmsBindings = mapOf( "v1_21_R7" to "1.21.11-R0.1-SNAPSHOT", - "v1_21_R6" to "1.21.10-R0.1-SNAPSHOT", - "v1_21_R5" to "1.21.8-R0.1-SNAPSHOT", - "v1_21_R4" to "1.21.5-R0.1-SNAPSHOT", - "v1_21_R3" to "1.21.4-R0.1-SNAPSHOT", - "v1_21_R2" to "1.21.3-R0.1-SNAPSHOT", - "v1_21_R1" to "1.21.1-R0.1-SNAPSHOT", - "v1_20_R4" to "1.20.6-R0.1-SNAPSHOT", - "v1_20_R3" to "1.20.4-R0.1-SNAPSHOT", - "v1_20_R2" to "1.20.2-R0.1-SNAPSHOT", - "v1_20_R1" to "1.20.1-R0.1-SNAPSHOT", ) -val jvmVersion = mapOf() nmsBindings.forEach { (key, value) -> project(":nms:$key") { apply() nmsBinding { - jvm = jvmVersion.getOrDefault(key, 21) + jvm = 21 version = value type = NMSBinding.Type.DIRECT } @@ -100,22 +80,6 @@ nmsBindings.forEach { (key, value) -> compileOnly(rootProject.libs.byteBuddy.core) } } - - tasks.register("runServer-$key") { - group = "servers" - minecraftVersion(value.split("-")[0]) - minHeapSize = serverMinHeap - maxHeapSize = serverMaxHeap - pluginJars(tasks.jar.flatMap { it.archiveFile }) - javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(jvmVersion.getOrDefault(key, 21))} - runDirectory.convention(layout.buildDirectory.dir("run/$key")) - systemProperty("disable.watchdog", "true") - systemProperty("net.kyori.ansi.colorLevel", color) - systemProperty("com.mojang.eula.agree", true) - systemProperty("iris.suppressReporting", !errorReporting) - jvmArgs("-javaagent:${project(":core:agent").tasks.jar.flatMap { it.archiveFile }.get().asFile.absolutePath}") - jvmArgs(additionalFlags.split(' ')) - } } val included: Configuration by configurations.creating diff --git a/core/agent/build.gradle.kts b/core/agent/build.gradle.kts index 9d6c9cb96..0421e533b 100644 --- a/core/agent/build.gradle.kts +++ b/core/agent/build.gradle.kts @@ -4,8 +4,8 @@ plugins { tasks.jar { manifest.attributes( - "Agent-Class" to "art.arcane.iris.util.agent.Installer", - "Premain-Class" to "art.arcane.iris.util.agent.Installer", + "Agent-Class" to "art.arcane.iris.util.project.agent.Installer", + "Premain-Class" to "art.arcane.iris.util.project.agent.Installer", "Can-Redefine-Classes" to true, "Can-Retransform-Classes" to true ) diff --git a/core/agent/src/main/java/art/arcane/iris/util/agent/Installer.java b/core/agent/src/main/java/art/arcane/iris/util/agent/Installer.java index 4d9b50536..d88085758 100644 --- a/core/agent/src/main/java/art/arcane/iris/util/agent/Installer.java +++ b/core/agent/src/main/java/art/arcane/iris/util/agent/Installer.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.agent; +package art.arcane.iris.util.project.agent; import java.lang.instrument.Instrumentation; diff --git a/core/build.gradle.kts b/core/build.gradle.kts index fcc2c1f30..e38516e62 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -35,7 +35,7 @@ plugins { alias(libs.plugins.kotlin.lombok) } -val apiVersion = "1.19" +val apiVersion = "1.21" val main = "art.arcane.iris.Iris" val lib = "art.arcane.iris.util" val volmLibCoordinate: String = providers.gradleProperty("volmLibCoordinate") diff --git a/core/src/main/java/art/arcane/iris/Iris.java b/core/src/main/java/art/arcane/iris/Iris.java index c671082dd..9e093a5b2 100644 --- a/core/src/main/java/art/arcane/iris/Iris.java +++ b/core/src/main/java/art/arcane/iris/Iris.java @@ -41,7 +41,7 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.exceptions.IrisException; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.function.NastyRunnable; import art.arcane.volmlib.util.hotload.ConfigHotloadEngine; import art.arcane.volmlib.util.io.IO; @@ -49,15 +49,15 @@ import art.arcane.volmlib.util.io.InstanceState; import art.arcane.volmlib.util.io.JarScanner; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.misc.Bindings; -import art.arcane.iris.util.misc.SlimJar; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitPlugin; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.plugin.chunk.ChunkTickets; -import art.arcane.iris.util.scheduling.J; -import art.arcane.iris.util.misc.ServerProperties; +import art.arcane.iris.util.common.misc.Bindings; +import art.arcane.iris.util.common.misc.SlimJar; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitPlugin; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.chunk.ChunkTickets; +import art.arcane.iris.util.common.scheduling.J; +import art.arcane.iris.util.common.misc.ServerProperties; import art.arcane.volmlib.util.scheduling.Queue; import art.arcane.volmlib.util.scheduling.ShurikenQueue; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/core/IrisSettings.java b/core/src/main/java/art/arcane/iris/core/IrisSettings.java index 6c6f81f27..0b4b00375 100644 --- a/core/src/main/java/art/arcane/iris/core/IrisSettings.java +++ b/core/src/main/java/art/arcane/iris/core/IrisSettings.java @@ -23,8 +23,8 @@ import art.arcane.iris.Iris; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONException; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.misc.getHardware; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.misc.getHardware; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/core/IrisWorlds.java b/core/src/main/java/art/arcane/iris/core/IrisWorlds.java index 5fb122735..cc03a1829 100644 --- a/core/src/main/java/art/arcane/iris/core/IrisWorlds.java +++ b/core/src/main/java/art/arcane/iris/core/IrisWorlds.java @@ -9,7 +9,7 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.io.IO; -import art.arcane.iris.util.misc.ServerProperties; +import art.arcane.iris.util.common.misc.ServerProperties; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/core/src/main/java/art/arcane/iris/core/ServerConfigurator.java b/core/src/main/java/art/arcane/iris/core/ServerConfigurator.java index d6ed95bd9..87459579f 100644 --- a/core/src/main/java/art/arcane/iris/core/ServerConfigurator.java +++ b/core/src/main/java/art/arcane/iris/core/ServerConfigurator.java @@ -27,10 +27,10 @@ import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.misc.ServerProperties; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.format.C; +import art.arcane.iris.util.common.misc.ServerProperties; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import lombok.NonNull; import lombok.SneakyThrows; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandDeveloper.java b/core/src/main/java/art/arcane/iris/core/commands/CommandDeveloper.java index 837158735..0c3552acf 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandDeveloper.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandDeveloper.java @@ -39,15 +39,15 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.iris.engine.object.annotations.Snippet; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.director.specialhandlers.NullableDimensionHandler; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.director.specialhandlers.NullableDimensionHandler; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.CountingDataInputStream; import art.arcane.volmlib.util.io.IO; @@ -55,12 +55,12 @@ import art.arcane.volmlib.util.mantle.runtime.TectonicPlate; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.matter.Matter; -import art.arcane.iris.util.nbt.mca.MCAFile; -import art.arcane.iris.util.nbt.mca.MCAUtil; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; -import art.arcane.iris.util.scheduling.jobs.Job; +import art.arcane.iris.util.nbt.common.mca.MCAFile; +import art.arcane.iris.util.nbt.common.mca.MCAUtil; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; +import art.arcane.iris.util.common.scheduling.jobs.Job; import lombok.SneakyThrows; import net.jpountz.lz4.LZ4BlockInputStream; import net.jpountz.lz4.LZ4BlockOutputStream; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandEdit.java b/core/src/main/java/art/arcane/iris/core/commands/CommandEdit.java index 91a10b05f..736df9854 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandEdit.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandEdit.java @@ -21,11 +21,11 @@ package art.arcane.iris.core.commands; import art.arcane.iris.Iris; import art.arcane.iris.core.service.StudioSVC; import art.arcane.iris.engine.object.*; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import java.awt.*; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandFind.java b/core/src/main/java/art/arcane/iris/core/commands/CommandFind.java index d82ee5561..5becde4f3 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandFind.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandFind.java @@ -22,12 +22,12 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.director.specialhandlers.ObjectHandler; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.director.specialhandlers.ObjectHandler; +import art.arcane.iris.util.common.format.C; @Director(name = "find", origin = DirectorOrigin.PLAYER, description = "Iris Find commands", aliases = "goto") public class CommandFind implements DirectorExecutor { diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandIris.java b/core/src/main/java/art/arcane/iris/core/commands/CommandIris.java index c89607746..9df7070f8 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandIris.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandIris.java @@ -29,25 +29,25 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.platform.PlatformChunkGenerator; +import art.arcane.iris.util.project.matter.TileWrapper; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.director.DirectorContext; +import art.arcane.iris.util.common.director.DirectorContext; import art.arcane.volmlib.util.director.DirectorParameterHandler; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; -import art.arcane.iris.util.director.specialhandlers.NullablePlayerHandler; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.director.specialhandlers.NullablePlayerHandler; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.parallel.SyncExecutor; -import art.arcane.iris.util.misc.ServerProperties; -import art.arcane.iris.util.misc.RegenRuntime; +import art.arcane.iris.util.common.parallel.SyncExecutor; +import art.arcane.iris.util.common.misc.ServerProperties; +import art.arcane.iris.util.common.misc.RegenRuntime; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; -import art.arcane.iris.util.matter.TileWrapper; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.matter.Matter; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -87,7 +87,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import static art.arcane.iris.core.service.EditSVC.deletingWorld; -import static art.arcane.iris.util.misc.ServerProperties.BUKKIT_YML; +import static art.arcane.iris.util.common.misc.ServerProperties.BUKKIT_YML; import static org.bukkit.Bukkit.getServer; @Director(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandJigsaw.java b/core/src/main/java/art/arcane/iris/core/commands/CommandJigsaw.java index 440beabac..513f6210b 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandJigsaw.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandJigsaw.java @@ -27,15 +27,15 @@ import art.arcane.iris.engine.object.IrisJigsawPiece; import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisObject; import art.arcane.iris.engine.object.IrisPosition; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.director.specialhandlers.ObjectHandler; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.director.specialhandlers.ObjectHandler; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import java.io.File; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandLazyPregen.java b/core/src/main/java/art/arcane/iris/core/commands/CommandLazyPregen.java index 02a566e2b..9ea35dd95 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandLazyPregen.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandLazyPregen.java @@ -24,10 +24,10 @@ import art.arcane.iris.core.gui.PregeneratorJob; import art.arcane.iris.core.pregenerator.LazyPregenerator; import art.arcane.iris.core.pregenerator.PregenTask; import art.arcane.iris.core.tools.IrisToolbelt; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.math.Position2; import org.bukkit.Bukkit; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandObject.java b/core/src/main/java/art/arcane/iris/core/commands/CommandObject.java index 53eb649cb..7454233e7 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandObject.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandObject.java @@ -28,15 +28,15 @@ import art.arcane.iris.core.tools.IrisConverter; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.data.Cuboid; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.data.registry.Materials; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.common.data.registry.Materials; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.director.specialhandlers.ObjectHandler; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.math.Direction; +import art.arcane.iris.util.common.director.specialhandlers.ObjectHandler; +import art.arcane.iris.util.common.format.C; +import art.arcane.iris.util.common.math.Direction; import art.arcane.volmlib.util.math.RNG; import org.bukkit.*; import org.bukkit.block.Block; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandPregen.java b/core/src/main/java/art/arcane/iris/core/commands/CommandPregen.java index 5b70a6c58..1e1f17cb7 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandPregen.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandPregen.java @@ -22,10 +22,10 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.gui.PregeneratorJob; import art.arcane.iris.core.pregenerator.PregenTask; import art.arcane.iris.core.tools.IrisToolbelt; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.math.Position2; import org.bukkit.World; import org.bukkit.util.Vector; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandSettings.java b/core/src/main/java/art/arcane/iris/core/commands/CommandSettings.java index 1a4889452..44f4a8623 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandSettings.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandSettings.java @@ -18,7 +18,7 @@ package art.arcane.iris.core.commands; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; public class CommandSettings implements DirectorExecutor { diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandStudio.java b/core/src/main/java/art/arcane/iris/core/commands/CommandStudio.java index 603208757..3dbd8da31 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandStudio.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandStudio.java @@ -33,18 +33,18 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.director.DirectorContext; -import art.arcane.iris.util.director.DirectorExecutor; -import art.arcane.iris.util.director.handlers.DimensionHandler; -import art.arcane.iris.util.director.specialhandlers.NullableDimensionHandler; +import art.arcane.iris.util.common.director.DirectorContext; +import art.arcane.iris.util.common.director.DirectorExecutor; +import art.arcane.iris.util.common.director.handlers.DimensionHandler; +import art.arcane.iris.util.common.director.specialhandlers.NullableDimensionHandler; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; @@ -53,14 +53,14 @@ import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.Spiraler; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.parallel.SyncExecutor; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.SyncExecutor; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.O; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.scheduling.jobs.ParallelRadiusJob; +import art.arcane.iris.util.common.scheduling.jobs.ParallelRadiusJob; import io.papermc.lib.PaperLib; import org.bukkit.*; import org.bukkit.event.inventory.InventoryType; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandTurboPregen.java b/core/src/main/java/art/arcane/iris/core/commands/CommandTurboPregen.java index 459942a1f..b3f80e01a 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandTurboPregen.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandTurboPregen.java @@ -22,10 +22,10 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.pregenerator.LazyPregenerator; import art.arcane.iris.core.pregenerator.TurboPregenerator; import art.arcane.iris.core.pregenerator.TurboPregenerator; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandUpdater.java b/core/src/main/java/art/arcane/iris/core/commands/CommandUpdater.java index 97fcba6be..fc0c90ad0 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandUpdater.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandUpdater.java @@ -24,11 +24,11 @@ import org.bukkit.World; import art.arcane.iris.Iris; import art.arcane.iris.core.pregenerator.ChunkUpdater; import art.arcane.iris.core.tools.IrisToolbelt; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; @Director(name = "updater", origin = DirectorOrigin.BOTH, description = "Iris World Updater") diff --git a/core/src/main/java/art/arcane/iris/core/commands/CommandWhat.java b/core/src/main/java/art/arcane/iris/core/commands/CommandWhat.java index 810fabd9f..bb83936d6 100644 --- a/core/src/main/java/art/arcane/iris/core/commands/CommandWhat.java +++ b/core/src/main/java/art/arcane/iris/core/commands/CommandWhat.java @@ -25,14 +25,14 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.director.DirectorExecutor; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Param; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.matter.MatterMarker; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Chunk; import org.bukkit.FluidCollisionMode; import org.bukkit.Material; diff --git a/core/src/main/java/art/arcane/iris/core/edit/BlockSignal.java b/core/src/main/java/art/arcane/iris/core/edit/BlockSignal.java index 2314b9261..678311e46 100644 --- a/core/src/main/java/art/arcane/iris/core/edit/BlockSignal.java +++ b/core/src/main/java/art/arcane/iris/core/edit/BlockSignal.java @@ -18,8 +18,8 @@ package art.arcane.iris.core.edit; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.SR; import org.bukkit.Location; import org.bukkit.block.Block; diff --git a/core/src/main/java/art/arcane/iris/core/edit/DustRevealer.java b/core/src/main/java/art/arcane/iris/core/edit/DustRevealer.java index 5e6c79879..a38fe6581 100644 --- a/core/src/main/java/art/arcane/iris/core/edit/DustRevealer.java +++ b/core/src/main/java/art/arcane/iris/core/edit/DustRevealer.java @@ -25,8 +25,8 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.bukkit.Sound; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/edit/JigsawEditor.java b/core/src/main/java/art/arcane/iris/core/edit/JigsawEditor.java index 0bc3a53ed..661e67f07 100644 --- a/core/src/main/java/art/arcane/iris/core/edit/JigsawEditor.java +++ b/core/src/main/java/art/arcane/iris/core/edit/JigsawEditor.java @@ -29,7 +29,7 @@ import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; diff --git a/core/src/main/java/art/arcane/iris/core/events/IrisLootEvent.java b/core/src/main/java/art/arcane/iris/core/events/IrisLootEvent.java index a0a658651..46c06bccf 100644 --- a/core/src/main/java/art/arcane/iris/core/events/IrisLootEvent.java +++ b/core/src/main/java/art/arcane/iris/core/events/IrisLootEvent.java @@ -5,7 +5,7 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.InventorySlotType; import art.arcane.iris.engine.object.IrisLootTable; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Getter; import org.bukkit.*; import org.bukkit.block.Block; diff --git a/core/src/main/java/art/arcane/iris/core/gui/NoiseExplorerGUI.java b/core/src/main/java/art/arcane/iris/core/gui/NoiseExplorerGUI.java index b4fc5e48d..4c8c38198 100644 --- a/core/src/main/java/art/arcane/iris/core/gui/NoiseExplorerGUI.java +++ b/core/src/main/java/art/arcane/iris/core/gui/NoiseExplorerGUI.java @@ -27,10 +27,10 @@ import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RollingSequence; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/core/src/main/java/art/arcane/iris/core/gui/PregeneratorJob.java b/core/src/main/java/art/arcane/iris/core/gui/PregeneratorJob.java index c3bd66ea3..78101f79f 100644 --- a/core/src/main/java/art/arcane/iris/core/gui/PregeneratorJob.java +++ b/core/src/main/java/art/arcane/iris/core/gui/PregeneratorJob.java @@ -34,7 +34,7 @@ import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.World; import javax.swing.*; diff --git a/core/src/main/java/art/arcane/iris/core/gui/VisionGUI.java b/core/src/main/java/art/arcane/iris/core/gui/VisionGUI.java index adcbbb202..4fe71aa3d 100644 --- a/core/src/main/java/art/arcane/iris/core/gui/VisionGUI.java +++ b/core/src/main/java/art/arcane/iris/core/gui/VisionGUI.java @@ -35,7 +35,7 @@ import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.O; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.Location; @@ -55,7 +55,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.BiFunction; -import static art.arcane.iris.util.data.registry.Attributes.MAX_HEALTH; +import static art.arcane.iris.util.common.data.registry.Attributes.MAX_HEALTH; public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener, MouseMotionListener, MouseInputListener { private static final long serialVersionUID = 2094606939770332040L; diff --git a/core/src/main/java/art/arcane/iris/core/gui/components/IrisRenderer.java b/core/src/main/java/art/arcane/iris/core/gui/components/IrisRenderer.java index e359a5811..7316357d9 100644 --- a/core/src/main/java/art/arcane/iris/core/gui/components/IrisRenderer.java +++ b/core/src/main/java/art/arcane/iris/core/gui/components/IrisRenderer.java @@ -21,7 +21,7 @@ package art.arcane.iris.core.gui.components; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiomeGeneratorLink; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import java.awt.*; import java.awt.image.BufferedImage; import java.util.function.BiFunction; diff --git a/core/src/main/java/art/arcane/iris/core/link/CustomItemsDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/CustomItemsDataProvider.java index acc950182..3f6cb9512 100644 --- a/core/src/main/java/art/arcane/iris/core/link/CustomItemsDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/CustomItemsDataProvider.java @@ -5,8 +5,8 @@ //import com.jojodmo.customitems.item.custom.block.CustomMushroomBlock; //import com.jojodmo.customitems.version.SafeMaterial; //import art.arcane.volmlib.util.collection.KList; -//import art.arcane.iris.util.reflect.WrappedField; -//import art.arcane.iris.util.reflect.WrappedReturningMethod; +//import art.arcane.iris.util.common.reflect.WrappedField; +//import art.arcane.iris.util.common.reflect.WrappedReturningMethod; //import org.bukkit.block.BlockFace; //import org.bukkit.block.data.BlockData; //import org.bukkit.block.data.MultipleFacing; diff --git a/core/src/main/java/art/arcane/iris/core/link/ExternalDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/ExternalDataProvider.java index 4c9bea6b9..251d9b803 100644 --- a/core/src/main/java/art/arcane/iris/core/link/ExternalDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/ExternalDataProvider.java @@ -7,7 +7,7 @@ import art.arcane.iris.core.nms.container.Pair; import art.arcane.iris.engine.data.cache.Cache; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.math.RNG; import lombok.Getter; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/core/link/FoliaWorldsLink.java b/core/src/main/java/art/arcane/iris/core/link/FoliaWorldsLink.java index 0e601819c..f3d2e4723 100644 --- a/core/src/main/java/art/arcane/iris/core/link/FoliaWorldsLink.java +++ b/core/src/main/java/art/arcane/iris/core/link/FoliaWorldsLink.java @@ -1,7 +1,7 @@ package art.arcane.iris.core.link; import art.arcane.iris.Iris; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/EcoItemsDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/EcoItemsDataProvider.java index 3996f0313..64a5b16ba 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/EcoItemsDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/EcoItemsDataProvider.java @@ -4,7 +4,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.reflect.WrappedField; +import art.arcane.iris.util.common.reflect.WrappedField; import com.willfp.ecoitems.items.EcoItem; import com.willfp.ecoitems.items.EcoItems; import org.bukkit.NamespacedKey; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/HMCLeavesDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/HMCLeavesDataProvider.java index 9f6b9929c..e8b5851b4 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/HMCLeavesDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/HMCLeavesDataProvider.java @@ -7,9 +7,9 @@ import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.common.reflect.WrappedField; +import art.arcane.iris.util.common.reflect.WrappedReturningMethod; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/ItemAdderDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/ItemAdderDataProvider.java index 872b78613..b8a475897 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/ItemAdderDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/ItemAdderDataProvider.java @@ -5,7 +5,7 @@ import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.IrisCustomData; import dev.lone.itemsadder.api.CustomBlock; import dev.lone.itemsadder.api.CustomStack; import dev.lone.itemsadder.api.Events.ItemsAdderLoadDataEvent; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java index eb478c30f..988fb1b05 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java @@ -5,8 +5,8 @@ import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; import me.kryniowesegryderiusz.kgenerators.Main; import me.kryniowesegryderiusz.kgenerators.api.KGeneratorsAPI; import me.kryniowesegryderiusz.kgenerators.generators.locations.objects.GeneratorLocation; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/MMOItemsDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/MMOItemsDataProvider.java index 4b92e1d9d..6a06b9c9f 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/MMOItemsDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/MMOItemsDataProvider.java @@ -4,7 +4,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.ItemTier; import net.Indyuce.mmoitems.api.block.CustomBlock; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java index fb5d08810..6fb23b344 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java @@ -27,8 +27,8 @@ import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; import io.lumine.mythic.bukkit.BukkitAdapter; import io.lumine.mythic.bukkit.utils.serialize.Chroma; import io.lumine.mythiccrucible.MythicCrucible; diff --git a/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java index 3273e3564..7a81c0dcc 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java @@ -12,8 +12,8 @@ import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; import org.bukkit.Color; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/core/loader/IrisData.java b/core/src/main/java/art/arcane/iris/core/loader/IrisData.java index e17fd034f..31afb74fa 100644 --- a/core/src/main/java/art/arcane/iris/core/loader/IrisData.java +++ b/core/src/main/java/art/arcane/iris/core/loader/IrisData.java @@ -32,16 +32,16 @@ import art.arcane.iris.engine.object.annotations.Snippet; import art.arcane.iris.engine.object.matter.IrisMatterObject; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.context.IrisContext; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.project.context.IrisContext; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.mantle.flag.MantleFlagAdapter; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.reflect.KeyedType; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.reflect.KeyedType; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.jetbrains.annotations.Nullable; diff --git a/core/src/main/java/art/arcane/iris/core/loader/IrisRegistrant.java b/core/src/main/java/art/arcane/iris/core/loader/IrisRegistrant.java index 6278acef4..63a689a9d 100644 --- a/core/src/main/java/art/arcane/iris/core/loader/IrisRegistrant.java +++ b/core/src/main/java/art/arcane/iris/core/loader/IrisRegistrant.java @@ -26,7 +26,7 @@ import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.RegistryListResource; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/core/loader/ResourceLoader.java b/core/src/main/java/art/arcane/iris/core/loader/ResourceLoader.java index f9979afd6..f3897033a 100644 --- a/core/src/main/java/art/arcane/iris/core/loader/ResourceLoader.java +++ b/core/src/main/java/art/arcane/iris/core/loader/ResourceLoader.java @@ -29,16 +29,16 @@ import art.arcane.iris.engine.framework.MeteredCache; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.data.KCache; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.CustomOutputStream; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/core/nms/INMS.java b/core/src/main/java/art/arcane/iris/core/nms/INMS.java index ba6520a35..374ae1d83 100644 --- a/core/src/main/java/art/arcane/iris/core/nms/INMS.java +++ b/core/src/main/java/art/arcane/iris/core/nms/INMS.java @@ -31,26 +31,16 @@ public class INMS { new Version(21, 11, null); private static final List REVISION = List.of( - new Version(21, 11, "v1_21_R7"), - new Version(21, 9, "v1_21_R6"), - new Version(21, 6, "v1_21_R5"), - new Version(21, 5, "v1_21_R4"), - new Version(21, 4, "v1_21_R3"), - new Version(21, 2, "v1_21_R2"), - new Version(21, 0, "v1_21_R1"), - new Version(20, 5, "v1_20_R4") + new Version(21, 11, "v1_21_R7") ); private static final List PACKS = List.of( - new Version(21, 5, "31100"), - new Version(21, 4, "31020"), - new Version(21, 2, "31000"), - new Version(20, 1, "3910") + new Version(21, 11, "31100") ); //@done private static final INMSBinding binding = bind(); - public static final String OVERWORLD_TAG = getTag(PACKS, "3910"); + public static final String OVERWORLD_TAG = getTag(PACKS, "31100"); public static INMSBinding get() { return binding; @@ -82,7 +72,7 @@ public class INMS { Iris.info("Locating NMS Binding for " + code); try { - Class clazz = Class.forName("art.arcane.iris.core.nms."+code+".NMSBinding"); + Class clazz = Class.forName("art.arcane.iris.core.nms." + code + ".NMSBinding"); try { Object b = clazz.getConstructor().newInstance(); if (b instanceof INMSBinding binding) { @@ -93,19 +83,22 @@ public class INMS { Iris.reportError(e); e.printStackTrace(); } - } catch (ClassNotFoundException|NoClassDefFoundError classNotFoundException) { + } catch (ClassNotFoundException | NoClassDefFoundError classNotFoundException) { Iris.warn("Failed to load NMS binding class for " + code + ": " + classNotFoundException.getMessage()); } - Iris.info("Craftbukkit " + code + " <-> " + NMSBinding1X.class.getSimpleName() + " Successfully Bound"); - Iris.warn("Note: Some features of Iris may not work the same since you are on an unsupported version of Minecraft."); - Iris.warn("Note: If this is a new version, expect an update soon."); + if (IrisSettings.get().getGeneral().isDisableNMS()) { + Iris.info("Craftbukkit " + code + " <-> " + NMSBinding1X.class.getSimpleName() + " Successfully Bound"); + Iris.warn("Note: NMS support is disabled. Iris is running in limited Bukkit fallback mode."); + return new NMSBinding1X(); + } - return new NMSBinding1X(); + String serverVersion = Bukkit.getServer().getBukkitVersion().split("-")[0]; + throw new IllegalStateException("Iris requires Minecraft 1.21.11 or newer. Detected server version: " + serverVersion); } private static String getTag(List versions, String def) { - var version = Bukkit.getServer().getBukkitVersion().split("-")[0].split("\\.", 3); + String[] version = Bukkit.getServer().getBukkitVersion().split("-")[0].split("\\.", 3); int major = 0; int minor = 0; @@ -119,9 +112,10 @@ public class INMS { return versions.getFirst().tag; } - for (var p : versions) { - if (p.major > major || p.minor > minor) + for (Version p : versions) { + if (p.major > major || p.minor > minor) { continue; + } return p.tag; } return def; diff --git a/core/src/main/java/art/arcane/iris/core/pack/IrisPack.java b/core/src/main/java/art/arcane/iris/core/pack/IrisPack.java index 81c9a382c..ed7455e46 100644 --- a/core/src/main/java/art/arcane/iris/core/pack/IrisPack.java +++ b/core/src/main/java/art/arcane/iris/core/pack/IrisPack.java @@ -30,7 +30,7 @@ import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.Data; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/pack/IrisPackRepository.java b/core/src/main/java/art/arcane/iris/core/pack/IrisPackRepository.java index d2869a59a..ba4119756 100644 --- a/core/src/main/java/art/arcane/iris/core/pack/IrisPackRepository.java +++ b/core/src/main/java/art/arcane/iris/core/pack/IrisPackRepository.java @@ -21,10 +21,10 @@ package art.arcane.iris.core.pack; import art.arcane.iris.Iris; import art.arcane.iris.core.service.StudioSVC; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.jobs.DownloadJob; -import art.arcane.iris.util.scheduling.jobs.JobCollection; -import art.arcane.iris.util.scheduling.jobs.SingleJob; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.jobs.DownloadJob; +import art.arcane.iris.util.common.scheduling.jobs.JobCollection; +import art.arcane.iris.util.common.scheduling.jobs.SingleJob; import lombok.Builder; import lombok.Data; import org.zeroturnaround.zip.ZipUtil; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/ChunkUpdater.java b/core/src/main/java/art/arcane/iris/core/pregenerator/ChunkUpdater.java index 602420384..03d78dea5 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/ChunkUpdater.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/ChunkUpdater.java @@ -5,14 +5,14 @@ import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.service.PreservationSVC; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; +import art.arcane.iris.util.project.profile.LoadBalancer; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RollingSequence; -import art.arcane.iris.util.plugin.chunk.TicketHolder; -import art.arcane.iris.util.profile.LoadBalancer; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.chunk.TicketHolder; +import art.arcane.iris.util.common.scheduling.J; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.Chunk; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/DeepSearchPregenerator.java b/core/src/main/java/art/arcane/iris/core/pregenerator/DeepSearchPregenerator.java index c19259c9b..55d241e3e 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/DeepSearchPregenerator.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/DeepSearchPregenerator.java @@ -6,7 +6,7 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.math.M; @@ -14,7 +14,7 @@ import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import lombok.Getter; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/IrisPregenerator.java b/core/src/main/java/art/arcane/iris/core/pregenerator/IrisPregenerator.java index 23c561a1f..ed52b2f25 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/IrisPregenerator.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/IrisPregenerator.java @@ -22,7 +22,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.tools.IrisPackBenchmarking; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.matter.Matter; @@ -30,7 +30,7 @@ import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.Looper; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/LazyPregenerator.java b/core/src/main/java/art/arcane/iris/core/pregenerator/LazyPregenerator.java index cc65f838e..baa682abf 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/LazyPregenerator.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/LazyPregenerator.java @@ -2,7 +2,7 @@ package art.arcane.iris.core.pregenerator; import com.google.gson.Gson; import art.arcane.iris.Iris; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.math.M; @@ -10,7 +10,7 @@ import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import io.papermc.lib.PaperLib; import lombok.Data; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/TurboPregenerator.java b/core/src/main/java/art/arcane/iris/core/pregenerator/TurboPregenerator.java index 9469273bb..1436ee289 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/TurboPregenerator.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/TurboPregenerator.java @@ -4,18 +4,18 @@ import com.google.gson.Gson; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.math.Spiraler; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.HyperLock; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.HyperLock; +import art.arcane.iris.util.common.parallel.MultiBurst; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import io.papermc.lib.PaperLib; import lombok.Data; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/methods/AsyncPregenMethod.java b/core/src/main/java/art/arcane/iris/core/pregenerator/methods/AsyncPregenMethod.java index 210831955..a01c2dcc2 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/methods/AsyncPregenMethod.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/methods/AsyncPregenMethod.java @@ -26,8 +26,8 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.scheduling.J; import io.papermc.lib.PaperLib; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/pregenerator/methods/MedievalPregenMethod.java b/core/src/main/java/art/arcane/iris/core/pregenerator/methods/MedievalPregenMethod.java index b658e8a10..0de08c2a1 100644 --- a/core/src/main/java/art/arcane/iris/core/pregenerator/methods/MedievalPregenMethod.java +++ b/core/src/main/java/art/arcane/iris/core/pregenerator/methods/MedievalPregenMethod.java @@ -27,7 +27,7 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/project/IrisProject.java b/core/src/main/java/art/arcane/iris/core/project/IrisProject.java index e0f1c9b42..1437a82a3 100644 --- a/core/src/main/java/art/arcane/iris/core/project/IrisProject.java +++ b/core/src/main/java/art/arcane/iris/core/project/IrisProject.java @@ -38,14 +38,14 @@ import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.O; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.scheduling.jobs.Job; -import art.arcane.iris.util.scheduling.jobs.JobCollection; -import art.arcane.iris.util.scheduling.jobs.ParallelQueueJob; +import art.arcane.iris.util.common.scheduling.jobs.Job; +import art.arcane.iris.util.common.scheduling.jobs.JobCollection; +import art.arcane.iris.util.common.scheduling.jobs.ParallelQueueJob; import lombok.Data; import org.bukkit.Bukkit; import org.bukkit.GameMode; diff --git a/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java b/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java index c731394c0..fa8b2f649 100644 --- a/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java +++ b/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java @@ -28,10 +28,10 @@ import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.reflect.KeyedType; +import art.arcane.iris.util.common.reflect.KeyedType; import org.bukkit.enchantments.Enchantment; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/art/arcane/iris/core/service/BoardSVC.java b/core/src/main/java/art/arcane/iris/core/service/BoardSVC.java index 2e7201dcc..38ae7f571 100644 --- a/core/src/main/java/art/arcane/iris/core/service/BoardSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/BoardSVC.java @@ -27,10 +27,10 @@ import art.arcane.volmlib.util.board.BoardProvider; import art.arcane.volmlib.util.board.BoardSettings; import art.arcane.volmlib.util.board.ScoreDirection; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.bukkit.Location; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/service/CommandSVC.java b/core/src/main/java/art/arcane/iris/core/service/CommandSVC.java index 32cb45731..7ce06c13f 100644 --- a/core/src/main/java/art/arcane/iris/core/service/CommandSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/CommandSVC.java @@ -23,13 +23,13 @@ import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.commands.CommandIris; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.util.director.DirectorContext; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.director.DirectorSystem; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.director.DirectorContext; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.director.DirectorSystem; +import art.arcane.iris.util.common.format.C; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.director.compat.DirectorEngineFactory; import art.arcane.volmlib.util.director.context.DirectorContextRegistry; import art.arcane.volmlib.util.director.runtime.DirectorExecutionMode; diff --git a/core/src/main/java/art/arcane/iris/core/service/ConversionSVC.java b/core/src/main/java/art/arcane/iris/core/service/ConversionSVC.java index 095aca94b..74835fd94 100644 --- a/core/src/main/java/art/arcane/iris/core/service/ConversionSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/ConversionSVC.java @@ -30,13 +30,13 @@ import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.nbt.io.NBTUtil; import art.arcane.volmlib.util.nbt.io.NamedTag; -import art.arcane.iris.util.nbt.mca.NBTWorld; +import art.arcane.iris.util.nbt.common.mca.NBTWorld; import art.arcane.volmlib.util.nbt.tag.CompoundTag; import art.arcane.volmlib.util.nbt.tag.IntTag; import art.arcane.volmlib.util.nbt.tag.ListTag; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.Jigsaw; diff --git a/core/src/main/java/art/arcane/iris/core/service/EditSVC.java b/core/src/main/java/art/arcane/iris/core/service/EditSVC.java index 8e20c5b8c..3fde24912 100644 --- a/core/src/main/java/art/arcane/iris/core/service/EditSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/EditSVC.java @@ -23,8 +23,8 @@ import art.arcane.iris.core.edit.BlockEditor; import art.arcane.iris.core.edit.BukkitBlockEditor; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/core/service/ExternalDataSVC.java b/core/src/main/java/art/arcane/iris/core/service/ExternalDataSVC.java index 92a94fa28..c4b30fbb0 100644 --- a/core/src/main/java/art/arcane/iris/core/service/ExternalDataSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/ExternalDataSVC.java @@ -27,8 +27,8 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.io.JarScanner; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import lombok.NonNull; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/service/GlobalCacheSVC.java b/core/src/main/java/art/arcane/iris/core/service/GlobalCacheSVC.java index e3b1436fa..4e37a3602 100644 --- a/core/src/main/java/art/arcane/iris/core/service/GlobalCacheSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/GlobalCacheSVC.java @@ -4,7 +4,7 @@ import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.pregenerator.cache.PregenCache; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.plugin.IrisService; +import art.arcane.iris.util.common.plugin.IrisService; import art.arcane.volmlib.util.scheduling.Looper; import lombok.NonNull; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/service/IrisEngineSVC.java b/core/src/main/java/art/arcane/iris/core/service/IrisEngineSVC.java index 88db03995..f481a63a1 100644 --- a/core/src/main/java/art/arcane/iris/core/service/IrisEngineSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/IrisEngineSVC.java @@ -8,14 +8,14 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.Looper; -import art.arcane.iris.util.stream.utility.CachedStream2D; -import art.arcane.iris.util.stream.utility.CachedStream3D; +import art.arcane.iris.util.project.stream.utility.CachedStream2D; +import art.arcane.iris.util.project.stream.utility.CachedStream3D; import lombok.Synchronized; import org.bukkit.Bukkit; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/core/service/IrisIntegrationService.java b/core/src/main/java/art/arcane/iris/core/service/IrisIntegrationService.java index 69fd5d450..6361c9355 100644 --- a/core/src/main/java/art/arcane/iris/core/service/IrisIntegrationService.java +++ b/core/src/main/java/art/arcane/iris/core/service/IrisIntegrationService.java @@ -4,7 +4,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.gui.PregeneratorJob; import art.arcane.iris.core.pregenerator.LazyPregenerator; import art.arcane.iris.core.pregenerator.TurboPregenerator; -import art.arcane.iris.util.plugin.IrisService; +import art.arcane.iris.util.common.plugin.IrisService; import art.arcane.volmlib.integration.IntegrationHandshakeRequest; import art.arcane.volmlib.integration.IntegrationHandshakeResponse; import art.arcane.volmlib.integration.IntegrationHeartbeat; diff --git a/core/src/main/java/art/arcane/iris/core/service/LogFilterSVC.java b/core/src/main/java/art/arcane/iris/core/service/LogFilterSVC.java index a04879928..a7bf663ce 100644 --- a/core/src/main/java/art/arcane/iris/core/service/LogFilterSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/LogFilterSVC.java @@ -1,7 +1,7 @@ package art.arcane.iris.core.service; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.plugin.IrisService; +import art.arcane.iris.util.common.plugin.IrisService; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Marker; diff --git a/core/src/main/java/art/arcane/iris/core/service/ObjectSVC.java b/core/src/main/java/art/arcane/iris/core/service/ObjectSVC.java index 3182cca14..11e3db939 100644 --- a/core/src/main/java/art/arcane/iris/core/service/ObjectSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/ObjectSVC.java @@ -19,8 +19,8 @@ package art.arcane.iris.core.service; import art.arcane.iris.Iris; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.scheduling.J; import lombok.Getter; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/core/service/PreservationSVC.java b/core/src/main/java/art/arcane/iris/core/service/PreservationSVC.java index dfb79c3fc..82f91645b 100644 --- a/core/src/main/java/art/arcane/iris/core/service/PreservationSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/PreservationSVC.java @@ -21,10 +21,10 @@ package art.arcane.iris.core.service; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.framework.MeteredCache; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.data.KCache; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.plugin.IrisService; +import art.arcane.iris.util.common.plugin.IrisService; import art.arcane.volmlib.util.scheduling.Looper; import org.jetbrains.annotations.Unmodifiable; diff --git a/core/src/main/java/art/arcane/iris/core/service/StudioSVC.java b/core/src/main/java/art/arcane/iris/core/service/StudioSVC.java index 8c7b03228..c8a4937b1 100644 --- a/core/src/main/java/art/arcane/iris/core/service/StudioSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/StudioSVC.java @@ -35,9 +35,9 @@ import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONException; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Bukkit; import org.bukkit.World; import org.zeroturnaround.zip.ZipUtil; diff --git a/core/src/main/java/art/arcane/iris/core/service/TreeSVC.java b/core/src/main/java/art/arcane/iris/core/service/TreeSVC.java index 5ce458aaf..de739408f 100644 --- a/core/src/main/java/art/arcane/iris/core/service/TreeSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/TreeSVC.java @@ -27,11 +27,11 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.data.Cuboid; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; diff --git a/core/src/main/java/art/arcane/iris/core/service/WandSVC.java b/core/src/main/java/art/arcane/iris/core/service/WandSVC.java index b14f6ba31..5ad88ce2e 100644 --- a/core/src/main/java/art/arcane/iris/core/service/WandSVC.java +++ b/core/src/main/java/art/arcane/iris/core/service/WandSVC.java @@ -24,17 +24,17 @@ import art.arcane.iris.core.edit.DustRevealer; import art.arcane.iris.core.link.WorldEditLink; import art.arcane.iris.core.wand.WandSelection; import art.arcane.iris.engine.object.IrisObject; +import art.arcane.iris.util.project.matter.WorldMatter; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.data.Cuboid; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.matter.Matter; -import art.arcane.iris.util.matter.WorldMatter; -import art.arcane.iris.util.plugin.IrisService; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.IrisService; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.SR; -import art.arcane.iris.util.scheduling.jobs.Job; +import art.arcane.iris.util.common.scheduling.jobs.Job; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; @@ -55,8 +55,8 @@ import java.util.Arrays; import java.util.Objects; import java.util.concurrent.CountDownLatch; -import static art.arcane.iris.util.data.registry.Particles.CRIT_MAGIC; -import static art.arcane.iris.util.data.registry.Particles.REDSTONE; +import static art.arcane.iris.util.common.data.registry.Particles.CRIT_MAGIC; +import static art.arcane.iris.util.common.data.registry.Particles.REDSTONE; public class WandSVC implements IrisService { private static final int MS_PER_TICK = Integer.parseInt(System.getProperty("iris.ms_per_tick", "30")); diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisConverter.java b/core/src/main/java/art/arcane/iris/core/tools/IrisConverter.java index 68bb0111b..47221723e 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisConverter.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisConverter.java @@ -3,13 +3,13 @@ package art.arcane.iris.core.tools; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.data.Varint; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.nbt.io.NBTUtil; import art.arcane.volmlib.util.nbt.io.NamedTag; import art.arcane.volmlib.util.nbt.tag.*; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisCreator.java b/core/src/main/java/art/arcane/iris/core/tools/IrisCreator.java index 093ff1753..078a8a248 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisCreator.java @@ -30,11 +30,11 @@ import art.arcane.iris.core.service.StudioSVC; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.volmlib.util.exceptions.IrisException; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.O; import io.papermc.lib.PaperLib; import lombok.Data; @@ -52,7 +52,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.IntSupplier; -import static art.arcane.iris.util.misc.ServerProperties.BUKKIT_YML; +import static art.arcane.iris.util.common.misc.ServerProperties.BUKKIT_YML; /** * Makes it a lot easier to setup an engine, world, studio or whatever @@ -231,8 +231,8 @@ public class IrisCreator { Iris.linkMultiverseCore.removeFromConfig(world); if (IrisSettings.get().getStudio().isDisableTimeAndWeather()) { - world.setGameRule(GameRule.DO_WEATHER_CYCLE, false); - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); + world.setGameRule(GameRule.ADVANCE_WEATHER, false); + world.setGameRule(GameRule.ADVANCE_TIME, false); world.setTime(6000); } }; diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/art/arcane/iris/core/tools/IrisPackBenchmarking.java index e5bebf9fe..8b152638b 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisPackBenchmarking.java @@ -11,7 +11,7 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.exceptions.IrisException; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.io.IO; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.Bukkit; diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java b/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java index 74fb750f8..be7c559ae 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java @@ -1,6 +1,6 @@ package art.arcane.iris.core.tools; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import org.bukkit.World; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisToolbelt.java b/core/src/main/java/art/arcane/iris/core/tools/IrisToolbelt.java index 57a95f43d..098979a8f 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisToolbelt.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisToolbelt.java @@ -31,8 +31,8 @@ import art.arcane.iris.core.service.StudioSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.scheduling.J; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/core/src/main/java/art/arcane/iris/core/wand/WandSelection.java b/core/src/main/java/art/arcane/iris/core/wand/WandSelection.java index 7f5cebb31..7d2353de5 100644 --- a/core/src/main/java/art/arcane/iris/core/wand/WandSelection.java +++ b/core/src/main/java/art/arcane/iris/core/wand/WandSelection.java @@ -27,7 +27,7 @@ import org.bukkit.util.Vector; import java.awt.*; -import static art.arcane.iris.util.data.registry.Particles.REDSTONE; +import static art.arcane.iris.util.common.data.registry.Particles.REDSTONE; public class WandSelection { private final Cuboid c; diff --git a/core/src/main/java/art/arcane/iris/engine/IrisComplex.java b/core/src/main/java/art/arcane/iris/engine/IrisComplex.java index ce7481313..d46465e23 100644 --- a/core/src/main/java/art/arcane/iris/engine/IrisComplex.java +++ b/core/src/main/java/art/arcane/iris/engine/IrisComplex.java @@ -25,14 +25,14 @@ import art.arcane.iris.engine.data.cache.Cache; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.context.IrisContext; -import art.arcane.iris.util.data.DataProvider; -import art.arcane.iris.util.interpolation.IrisInterpolation.NoiseKey; +import art.arcane.iris.util.project.context.IrisContext; +import art.arcane.iris.util.common.data.DataProvider; +import art.arcane.iris.util.project.interpolation.IrisInterpolation.NoiseKey; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; diff --git a/core/src/main/java/art/arcane/iris/engine/IrisEngine.java b/core/src/main/java/art/arcane/iris/engine/IrisEngine.java index 2d849d224..5b3bf57ee 100644 --- a/core/src/main/java/art/arcane/iris/engine/IrisEngine.java +++ b/core/src/main/java/art/arcane/iris/engine/IrisEngine.java @@ -37,12 +37,12 @@ import art.arcane.iris.engine.mantle.EngineMantle; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.atomics.AtomicRollingSequence; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.M; @@ -50,7 +50,7 @@ import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterStructurePOI; import art.arcane.volmlib.util.matter.slices.container.JigsawStructureContainer; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/IrisEngineMantle.java b/core/src/main/java/art/arcane/iris/engine/IrisEngineMantle.java index 8d7b6d3d6..2a0476716 100644 --- a/core/src/main/java/art/arcane/iris/engine/IrisEngineMantle.java +++ b/core/src/main/java/art/arcane/iris/engine/IrisEngineMantle.java @@ -31,6 +31,7 @@ import art.arcane.iris.engine.mantle.components.MantleCarvingComponent; import art.arcane.iris.engine.mantle.components.MantleFluidBodyComponent; import art.arcane.iris.engine.mantle.components.MantleJigsawComponent; import art.arcane.iris.engine.mantle.components.MantleObjectComponent; +import art.arcane.iris.util.project.matter.IrisMatterSupport; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.format.Form; @@ -42,13 +43,12 @@ import art.arcane.volmlib.util.mantle.runtime.MantleHooks; import art.arcane.volmlib.util.mantle.runtime.TectonicPlate; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.matter.IrisMatterSupport; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.matter.IrisMatter; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.MatterSlice; -import art.arcane.iris.util.parallel.HyperLock; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.HyperLock; +import art.arcane.iris.util.common.parallel.MultiBurst; import lombok.*; import org.bukkit.World; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/IrisWorldManager.java b/core/src/main/java/art/arcane/iris/engine/IrisWorldManager.java index 47fd99dfa..737876a33 100644 --- a/core/src/main/java/art/arcane/iris/engine/IrisWorldManager.java +++ b/core/src/main/java/art/arcane/iris/engine/IrisWorldManager.java @@ -41,13 +41,13 @@ import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.MatterMarker; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.plugin.Chunks; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.plugin.Chunks; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.Looper; -import art.arcane.iris.util.scheduling.jobs.QueueJob; +import art.arcane.iris.util.common.scheduling.jobs.QueueJob; import io.papermc.lib.PaperLib; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/actuator/IrisBiomeActuator.java b/core/src/main/java/art/arcane/iris/engine/actuator/IrisBiomeActuator.java index 2b506013f..93344ab9d 100644 --- a/core/src/main/java/art/arcane/iris/engine/actuator/IrisBiomeActuator.java +++ b/core/src/main/java/art/arcane/iris/engine/actuator/IrisBiomeActuator.java @@ -23,9 +23,9 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedActuator; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterBiomeInject; import art.arcane.volmlib.util.matter.slices.BiomeInjectMatter; diff --git a/core/src/main/java/art/arcane/iris/engine/actuator/IrisDecorantActuator.java b/core/src/main/java/art/arcane/iris/engine/actuator/IrisDecorantActuator.java index d46e03f37..ee510fe56 100644 --- a/core/src/main/java/art/arcane/iris/engine/actuator/IrisDecorantActuator.java +++ b/core/src/main/java/art/arcane/iris/engine/actuator/IrisDecorantActuator.java @@ -23,9 +23,9 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedActuator; import art.arcane.iris.engine.framework.EngineDecorator; import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/engine/actuator/IrisTerrainNormalActuator.java b/core/src/main/java/art/arcane/iris/engine/actuator/IrisTerrainNormalActuator.java index 599293351..a54b6d39b 100644 --- a/core/src/main/java/art/arcane/iris/engine/actuator/IrisTerrainNormalActuator.java +++ b/core/src/main/java/art/arcane/iris/engine/actuator/IrisTerrainNormalActuator.java @@ -23,9 +23,9 @@ import art.arcane.iris.engine.framework.EngineAssignedActuator; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisRegion; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java b/core/src/main/java/art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java index 52b2f1ac4..e112eaa55 100644 --- a/core/src/main/java/art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java +++ b/core/src/main/java/art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java @@ -21,7 +21,7 @@ package art.arcane.iris.engine.data.chunk; import art.arcane.iris.core.nms.BiomeBaseInjector; import art.arcane.iris.core.nms.INMS; import art.arcane.volmlib.util.data.IrisBiomeStorage; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.IrisCustomData; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/core/src/main/java/art/arcane/iris/engine/data/chunk/MCATerrainChunk.java b/core/src/main/java/art/arcane/iris/engine/data/chunk/MCATerrainChunk.java index ce4a42b6c..96113b120 100644 --- a/core/src/main/java/art/arcane/iris/engine/data/chunk/MCATerrainChunk.java +++ b/core/src/main/java/art/arcane/iris/engine/data/chunk/MCATerrainChunk.java @@ -20,9 +20,9 @@ package art.arcane.iris.engine.data.chunk; import art.arcane.iris.Iris; import art.arcane.iris.core.nms.BiomeBaseInjector; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.nbt.mca.Chunk; -import art.arcane.iris.util.nbt.mca.NBTWorld; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.nbt.common.mca.Chunk; +import art.arcane.iris.util.nbt.common.mca.NBTWorld; import lombok.AllArgsConstructor; import lombok.Builder; import org.bukkit.Material; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisCeilingDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisCeilingDecorator.java index bc8f30bb1..abbbe7cc3 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisCeilingDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisCeilingDecorator.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.Material; import org.bukkit.block.BlockFace; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisEngineDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisEngineDecorator.java index d6b8dae8c..a8893319b 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisEngineDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisEngineDecorator.java @@ -26,8 +26,8 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.math.RNG; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaFloorDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaFloorDecorator.java index 3b2a3b70a..cedecbab8 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaFloorDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaFloorDecorator.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaSurfaceDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaSurfaceDecorator.java index e5189e2f5..d12713609 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaSurfaceDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSeaSurfaceDecorator.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisShoreLineDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisShoreLineDecorator.java index 5a7ad5b59..8566927c5 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisShoreLineDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisShoreLineDecorator.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSurfaceDecorator.java b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSurfaceDecorator.java index a691f2463..16ef3bbe2 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/IrisSurfaceDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/IrisSurfaceDecorator.java @@ -24,9 +24,9 @@ import art.arcane.iris.engine.object.InferredType; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisDecorationPart; import art.arcane.iris.engine.object.IrisDecorator; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.Material; import org.bukkit.block.BlockFace; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/Engine.java b/core/src/main/java/art/arcane/iris/engine/framework/Engine.java index c9c9db5ce..d621bd80d 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/Engine.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/Engine.java @@ -37,18 +37,19 @@ import art.arcane.iris.engine.data.cache.Cache; import art.arcane.iris.engine.data.chunk.TerrainChunk; import art.arcane.iris.engine.mantle.EngineMantle; import art.arcane.iris.engine.object.*; +import art.arcane.iris.util.project.matter.TileWrapper; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.context.IrisContext; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.DataProvider; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.project.context.IrisContext; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.DataProvider; +import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.function.Function2; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.BlockPosition; @@ -58,15 +59,14 @@ import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.MatterCavern; import art.arcane.volmlib.util.matter.MatterUpdate; -import art.arcane.iris.util.matter.TileWrapper; import art.arcane.volmlib.util.matter.slices.container.JigsawPieceContainer; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.reflect.W; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.reflect.W; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import io.papermc.lib.PaperLib; import org.bukkit.*; import org.bukkit.block.Biome; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineActuator.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineActuator.java index 056a5c197..245a4d6bf 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineActuator.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineActuator.java @@ -18,9 +18,9 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public interface EngineActuator extends EngineComponent { @BlockCoordinates void actuate(int x, int z, Hunk output, boolean multicore, ChunkContext context); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedActuator.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedActuator.java index 0c051b76a..211e2a3ac 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedActuator.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedActuator.java @@ -18,9 +18,9 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public abstract class EngineAssignedActuator extends EngineAssignedComponent implements EngineActuator { public EngineAssignedActuator(Engine engine, String name) { super(engine, name); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedBiModifier.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedBiModifier.java index 6d380e17c..5f53de922 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedBiModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedBiModifier.java @@ -19,7 +19,7 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public abstract class EngineAssignedBiModifier extends EngineAssignedComponent implements EngineBiModifier { public EngineAssignedBiModifier(Engine engine, String name) { super(engine, name); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedModifier.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedModifier.java index 6fb875917..8e49f4651 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedModifier.java @@ -19,9 +19,9 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.Iris; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public abstract class EngineAssignedModifier extends EngineAssignedComponent implements EngineModifier { public EngineAssignedModifier(Engine engine, String name) { super(engine, name); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedWorldManager.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedWorldManager.java index 1efac5882..e1f0bb569 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedWorldManager.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineAssignedWorldManager.java @@ -21,11 +21,11 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.Iris; import art.arcane.iris.core.events.IrisEngineHotloadEvent; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; -import org.bukkit.*; +import art.arcane.iris.util.common.format.C; +import art.arcane.volmlib.util.math.Position2; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; +import org.bukkit.*; import org.bukkit.entity.EnderSignal; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -51,11 +51,11 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent taskId = -1; } - public EngineAssignedWorldManager(Engine engine) { - super(engine, "World"); - Iris.instance.registerListener(this); - taskId = J.sr(this::onTick, 1); - } + public EngineAssignedWorldManager(Engine engine) { + super(engine, "World"); + Iris.instance.registerListener(this); + taskId = J.sr(this::onTick, 1); + } @EventHandler public void on(IrisEngineHotloadEvent e) { @@ -135,11 +135,11 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent } @Override - public void close() { - super.close(); - Iris.instance.unregisterListener(this); - if (taskId != -1) { - J.csr(taskId); - } - } -} + public void close() { + super.close(); + Iris.instance.unregisterListener(this); + if (taskId != -1) { + J.csr(taskId); + } + } +} diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineBiModifier.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineBiModifier.java index 13123f59a..d6eb6dc32 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineBiModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineBiModifier.java @@ -19,7 +19,7 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public interface EngineBiModifier extends EngineComponent { void modify(int x, int z, Hunk a, Hunk b); } diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineComponent.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineComponent.java index 7fb6cc808..397338223 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineComponent.java @@ -23,7 +23,7 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.IrisComplex; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.volmlib.util.math.RollingSequence; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.MultiBurst; import org.bukkit.event.Listener; public interface EngineComponent { diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineDecorator.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineDecorator.java index 51e29c84e..aa5ebd9c5 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineDecorator.java @@ -19,9 +19,9 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.block.data.BlockData; public interface EngineDecorator extends EngineComponent { diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineMode.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineMode.java index 08309047f..37fdecaba 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineMode.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineMode.java @@ -21,14 +21,14 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.IrisComplex; import art.arcane.iris.engine.mantle.EngineMantle; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RollingSequence; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineModifier.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineModifier.java index 9608cbb20..79f1cf5c5 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineModifier.java @@ -18,9 +18,9 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public interface EngineModifier extends EngineComponent { @BlockCoordinates void modify(int x, int z, Hunk t, boolean multicore, ChunkContext context); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EnginePlayer.java b/core/src/main/java/art/arcane/iris/engine/framework/EnginePlayer.java index 5dae25343..50d4754f1 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EnginePlayer.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EnginePlayer.java @@ -24,7 +24,7 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisEffect; import art.arcane.iris.engine.object.IrisRegion; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.bukkit.Location; import org.bukkit.entity.Player; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineStage.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineStage.java index 68f83fade..aba9e22eb 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineStage.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineStage.java @@ -18,9 +18,9 @@ package art.arcane.iris.engine.framework; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/EngineTarget.java b/core/src/main/java/art/arcane/iris/engine/framework/EngineTarget.java index 4a4651258..2fd45b264 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/EngineTarget.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/EngineTarget.java @@ -21,7 +21,7 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisWorld; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.MultiBurst; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/Locator.java b/core/src/main/java/art/arcane/iris/engine/framework/Locator.java index 228aeb204..f70e4c9aa 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/Locator.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/Locator.java @@ -26,19 +26,19 @@ import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisObject; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.matter.MatterCavern; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.scheduling.jobs.SingleJob; +import art.arcane.iris.util.common.scheduling.jobs.SingleJob; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/PregeneratedData.java b/core/src/main/java/art/arcane/iris/engine/framework/PregeneratedData.java index 7a0790d45..dfee059e3 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/PregeneratedData.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/PregeneratedData.java @@ -19,8 +19,8 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.engine.data.chunk.TerrainChunk; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/ResultLocator.java b/core/src/main/java/art/arcane/iris/engine/framework/ResultLocator.java index 9945b109c..1a395f8db 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/ResultLocator.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/ResultLocator.java @@ -6,8 +6,8 @@ import art.arcane.iris.engine.object.IrisObject; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.Spiraler; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.apache.commons.lang3.function.TriFunction; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/SeedManager.java b/core/src/main/java/art/arcane/iris/engine/framework/SeedManager.java index fe66abb6e..0990c7a30 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/SeedManager.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/SeedManager.java @@ -20,7 +20,7 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.engine.object.NoiseStyle; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AccessLevel; import lombok.Data; import lombok.Setter; diff --git a/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java b/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java index 01ff0734e..b6d9bcee1 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java @@ -12,8 +12,8 @@ import art.arcane.iris.engine.object.InventorySlotType; import art.arcane.iris.engine.object.IrisLootTable; import art.arcane.iris.engine.object.TileData; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.math.RNG; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedPiece.java b/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedPiece.java index 7ccef0684..62d322ff3 100644 --- a/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedPiece.java +++ b/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedPiece.java @@ -23,7 +23,7 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.math.AxisAlignedBB; +import art.arcane.iris.util.common.math.AxisAlignedBB; import lombok.AccessLevel; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedStructure.java b/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedStructure.java index 4f55dfc23..508cb361d 100644 --- a/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedStructure.java +++ b/core/src/main/java/art/arcane/iris/engine/jigsaw/PlannedStructure.java @@ -32,7 +32,7 @@ import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.slices.container.JigsawPieceContainer; import art.arcane.volmlib.util.matter.slices.container.JigsawStructureContainer; import art.arcane.volmlib.util.matter.slices.container.JigsawStructuresContainer; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.bukkit.Axis; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/EngineMantle.java b/core/src/main/java/art/arcane/iris/engine/mantle/EngineMantle.java index c676c5330..deae59da4 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/EngineMantle.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/EngineMantle.java @@ -29,10 +29,10 @@ import art.arcane.iris.engine.mantle.components.MantleObjectComponent; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisPosition; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; import art.arcane.volmlib.util.mantle.flag.MantleFlag; @@ -41,8 +41,8 @@ import art.arcane.volmlib.util.matter.MatterFluidBody; import art.arcane.volmlib.util.matter.MatterMarker; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.slices.UpdateMatter; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.World; import org.bukkit.block.data.BlockData; import org.jetbrains.annotations.UnmodifiableView; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/MantleComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/MantleComponent.java index 6d4f63fe0..85058a0f4 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/MantleComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/MantleComponent.java @@ -21,12 +21,12 @@ package art.arcane.iris.engine.mantle; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.IrisComplex; import art.arcane.iris.engine.object.IrisDimension; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.matter.Matter; -import art.arcane.iris.util.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.BurstExecutor; import org.jetbrains.annotations.NotNull; public interface MantleComponent extends Comparable { diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java b/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java index fdfe058f0..1971814de 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java @@ -18,6 +18,7 @@ package art.arcane.iris.engine.mantle; +import art.arcane.iris.util.project.matter.TileWrapper; import com.google.common.collect.ImmutableList; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; @@ -31,8 +32,8 @@ import art.arcane.iris.engine.object.IrisPosition; import art.arcane.iris.engine.object.TileData; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.function.Function3; import art.arcane.volmlib.util.mantle.runtime.Mantle; @@ -40,9 +41,8 @@ import art.arcane.volmlib.util.mantle.runtime.MantleChunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.matter.MatterCavern; -import art.arcane.iris.util.matter.TileWrapper; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.scheduling.J; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import lombok.Data; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleCarvingComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleCarvingComponent.java index 875326801..10e2def42 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleCarvingComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleCarvingComponent.java @@ -26,7 +26,7 @@ import art.arcane.iris.engine.mantle.MantleWriter; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisCarving; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.mantle.flag.ReservedFlag; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFluidBodyComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFluidBodyComponent.java index 820d2e384..6b016309d 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFluidBodyComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFluidBodyComponent.java @@ -26,7 +26,7 @@ import art.arcane.iris.engine.mantle.MantleWriter; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisFluidBodies; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.mantle.flag.ReservedFlag; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleJigsawComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleJigsawComponent.java index e9d0fdb42..305ec7760 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleJigsawComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleJigsawComponent.java @@ -27,14 +27,14 @@ import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.mantle.flag.ReservedFlag; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.slices.container.JigsawStructuresContainer; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import org.jetbrains.annotations.Nullable; import java.util.List; diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java index 7d604473e..905ebd2c2 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java @@ -30,18 +30,18 @@ import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.mantle.flag.ReservedFlag; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterStructurePOI; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.noise.NoiseType; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.noise.NoiseType; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.util.BlockVector; import java.io.IOException; diff --git a/core/src/main/java/art/arcane/iris/engine/mode/ModeOverworld.java b/core/src/main/java/art/arcane/iris/engine/mode/ModeOverworld.java index 7b6a95c61..8faecf63c 100644 --- a/core/src/main/java/art/arcane/iris/engine/mode/ModeOverworld.java +++ b/core/src/main/java/art/arcane/iris/engine/mode/ModeOverworld.java @@ -27,7 +27,7 @@ import art.arcane.iris.engine.framework.EngineMode; import art.arcane.iris.engine.framework.EngineStage; import art.arcane.iris.engine.framework.IrisEngineMode; import art.arcane.iris.engine.modifier.*; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.block.data.BlockData; import java.util.concurrent.atomic.AtomicLong; diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisCarveModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisCarveModifier.java index 5c8dad816..108392363 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisCarveModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisCarveModifier.java @@ -25,11 +25,11 @@ import art.arcane.iris.engine.framework.EngineAssignedModifier; import art.arcane.iris.engine.object.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.function.Consumer4; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; import art.arcane.volmlib.util.math.M; diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisCustomModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisCustomModifier.java index 984d23bcf..30cc7b88c 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisCustomModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisCustomModifier.java @@ -2,12 +2,12 @@ package art.arcane.iris.engine.modifier; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; import org.bukkit.block.data.BlockData; public class IrisCustomModifier extends EngineAssignedModifier { public IrisCustomModifier(Engine engine) { diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java index 3e15b42ee..5af3f6bf5 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java @@ -21,14 +21,14 @@ package art.arcane.iris.engine.modifier; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; import art.arcane.iris.engine.object.*; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.data.HeightMap; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterCavern; -import art.arcane.iris.util.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.BurstExecutor; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.Material; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java index a5b84d922..96476b400 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java @@ -20,10 +20,10 @@ package art.arcane.iris.engine.modifier; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.iris.util.parallel.BurstExecutor; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.project.hunk.Hunk; +import art.arcane.iris.util.common.parallel.BurstExecutor; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPostModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPostModifier.java index 2fcfcb1da..7ac27ceaf 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPostModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPostModifier.java @@ -22,9 +22,9 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisSlopeClip; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import org.bukkit.Material; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IRare.java b/core/src/main/java/art/arcane/iris/engine/object/IRare.java index 5502fc5e6..9135d6064 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IRare.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IRare.java @@ -19,8 +19,8 @@ package art.arcane.iris.engine.object; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; import java.util.List; public interface IRare { diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisBiome.java b/core/src/main/java/art/arcane/iris/engine/object/IrisBiome.java index 928c34411..023ae453e 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisBiome.java @@ -29,14 +29,14 @@ import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.DataProvider; import art.arcane.volmlib.util.data.VanillaBiomeMap; import art.arcane.volmlib.util.inventorygui.RandomColor; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisBiomeGeneratorLink.java b/core/src/main/java/art/arcane/iris/engine/object/IrisBiomeGeneratorLink.java index 227058544..8a8ad3e4c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisBiomeGeneratorLink.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisBiomeGeneratorLink.java @@ -20,8 +20,8 @@ package art.arcane.iris.engine.object; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; -import art.arcane.iris.util.data.DataProvider; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.common.data.DataProvider; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import lombok.*; import lombok.experimental.Accessors; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisBiomePaletteLayer.java b/core/src/main/java/art/arcane/iris/engine/object/IrisBiomePaletteLayer.java index 1e43e66ce..91967e6ee 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisBiomePaletteLayer.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisBiomePaletteLayer.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java b/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java index ab03d515a..dc596face 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java @@ -27,9 +27,9 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCave.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCave.java index 4292261e0..94c5c822b 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCave.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCave.java @@ -29,8 +29,8 @@ import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterCavern; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCaveShape.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCaveShape.java index 3abaca244..4a845f853 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCaveShape.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCaveShape.java @@ -6,7 +6,7 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCommand.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCommand.java index f04ee6d5c..c8d847cbe 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCommand.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCommand.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.object.annotations.ArrayType; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.iris.engine.object.annotations.Snippet; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.collection.KList; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java index d2ebd8c0d..0f5d49042 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java @@ -21,10 +21,10 @@ package art.arcane.iris.engine.object; import com.google.gson.Gson; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Data; import org.bukkit.Material; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java index e584bb806..83bb42c1e 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java @@ -22,7 +22,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Required; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java index 7d07990fe..80061bbc2 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java @@ -22,7 +22,7 @@ import art.arcane.iris.Iris; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Required; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisDecorator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisDecorator.java index fc6e34b52..b642d58a2 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisDecorator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisDecorator.java @@ -24,7 +24,7 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java b/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java index 9c067c63d..4284fc3de 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java @@ -32,14 +32,14 @@ import art.arcane.iris.engine.object.annotations.functions.ComponentFlagFunction import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.DataProvider; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisEffect.java b/core/src/main/java/art/arcane/iris/engine/object/IrisEffect.java index 4306165e1..cc22bd237 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisEffect.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisEffect.java @@ -24,7 +24,7 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisEngineStreamType.java b/core/src/main/java/art/arcane/iris/engine/object/IrisEngineStreamType.java index deddd1b06..4bdb39890 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisEngineStreamType.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisEngineStreamType.java @@ -20,7 +20,7 @@ package art.arcane.iris.engine.object; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.annotations.Desc; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.function.Function; @Desc("Represents a stream from the engine") diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisEntity.java b/core/src/main/java/art/arcane/iris/engine/object/IrisEntity.java index 634df49df..2a0b4ac81 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisEntity.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisEntity.java @@ -27,13 +27,13 @@ import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.Chunks; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.Chunks; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import lombok.AllArgsConstructor; import lombok.Data; @@ -58,7 +58,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import static art.arcane.iris.util.data.registry.Particles.ITEM; +import static art.arcane.iris.util.common.data.registry.Particles.ITEM; @SuppressWarnings("ALL") @Accessors(chain = true) diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisEntitySpawn.java b/core/src/main/java/art/arcane/iris/engine/object/IrisEntitySpawn.java index 231324e14..ca78a3a8d 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisEntitySpawn.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisEntitySpawn.java @@ -23,12 +23,12 @@ import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.annotations.*; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.Vector3d; import art.arcane.volmlib.util.matter.MatterMarker; import art.arcane.volmlib.util.matter.slices.MarkerMatter; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisExpression.java b/core/src/main/java/art/arcane/iris/engine/object/IrisExpression.java index e055b5a5b..1d28e899c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisExpression.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisExpression.java @@ -31,9 +31,9 @@ import art.arcane.iris.engine.object.annotations.Required; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisExpressionLoad.java b/core/src/main/java/art/arcane/iris/engine/object/IrisExpressionLoad.java index 3705c9003..86bb26d77 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisExpressionLoad.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisExpressionLoad.java @@ -25,8 +25,8 @@ import art.arcane.iris.engine.object.annotations.Required; import art.arcane.iris.engine.object.annotations.Snippet; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.stream.ProceduralStream; import lombok.*; import lombok.experimental.Accessors; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisGenerator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisGenerator.java index 65019a8c8..fd50a0196 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisGenerator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisGenerator.java @@ -22,11 +22,11 @@ import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CellGenerator; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CellGenerator; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisGeneratorStyle.java b/core/src/main/java/art/arcane/iris/engine/object/IrisGeneratorStyle.java index 4d8e5a062..feca3a06f 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisGeneratorStyle.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisGeneratorStyle.java @@ -23,10 +23,10 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.noise.ExpressionNoise; -import art.arcane.iris.util.noise.ImageNoise; -import art.arcane.iris.util.noise.NoiseGenerator; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.noise.ExpressionNoise; +import art.arcane.iris.util.project.noise.ImageNoise; +import art.arcane.iris.util.project.noise.NoiseGenerator; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisImage.java b/core/src/main/java/art/arcane/iris/engine/object/IrisImage.java index 212e07fc8..c8e6fca07 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisImage.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisImage.java @@ -21,7 +21,7 @@ package art.arcane.iris.engine.object; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import javax.imageio.ImageIO; import java.awt.*; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisImageMap.java b/core/src/main/java/art/arcane/iris/engine/object/IrisImageMap.java index 764d24762..d485e79a2 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisImageMap.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisImageMap.java @@ -25,8 +25,8 @@ import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.MinNumber; import art.arcane.iris.engine.object.annotations.RegistryListResource; import art.arcane.iris.engine.object.annotations.Snippet; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator.java index 5ebf36d0b..79c9fe6f1 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator.java @@ -23,8 +23,8 @@ import art.arcane.iris.engine.object.annotations.MaxNumber; import art.arcane.iris.engine.object.annotations.MinNumber; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator3D.java b/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator3D.java index 2bc9cd648..7abf4ef46 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator3D.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisInterpolator3D.java @@ -20,8 +20,8 @@ package art.arcane.iris.engine.object; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.function.NoiseProvider3; -import art.arcane.iris.util.interpolation.InterpolationMethod3D; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod3D; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPiece.java b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPiece.java index def3d12eb..bf51a945c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPiece.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPiece.java @@ -27,7 +27,7 @@ import art.arcane.iris.engine.object.annotations.RegistryListResource; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPool.java b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPool.java index 22113ce74..559dd8c82 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPool.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawPool.java @@ -25,7 +25,7 @@ import art.arcane.iris.engine.object.annotations.RegistryListResource; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawStructure.java b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawStructure.java index 3a8704e80..b05180838 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawStructure.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisJigsawStructure.java @@ -26,7 +26,7 @@ import art.arcane.iris.engine.object.annotations.functions.StructureKeyFunction; import art.arcane.iris.engine.object.annotations.functions.StructureKeyOrTagFunction; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java b/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java index c98ed9cfc..3fbc927d4 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java @@ -26,11 +26,11 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisLootReference.java b/core/src/main/java/art/arcane/iris/engine/object/IrisLootReference.java index b701e37fa..5878cee2d 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisLootReference.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisLootReference.java @@ -21,7 +21,7 @@ package art.arcane.iris.engine.object; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.DataProvider; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisLootTable.java b/core/src/main/java/art/arcane/iris/engine/object/IrisLootTable.java index 5ec91d5e5..c26d6d4f6 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisLootTable.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisLootTable.java @@ -26,7 +26,7 @@ import art.arcane.iris.engine.object.annotations.Required; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisMarker.java b/core/src/main/java/art/arcane/iris/engine/object/IrisMarker.java index 45d47853e..6008abc9b 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisMarker.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisMarker.java @@ -25,7 +25,7 @@ import art.arcane.iris.engine.object.annotations.RegistryListResource; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisMaterialPalette.java b/core/src/main/java/art/arcane/iris/engine/object/IrisMaterialPalette.java index 811d09ea2..d1de0ed0a 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisMaterialPalette.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisMaterialPalette.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisMod.java b/core/src/main/java/art/arcane/iris/engine/object/IrisMod.java index 3c587af58..fa31bbd46 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisMod.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisMod.java @@ -22,7 +22,7 @@ import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisNoiseGenerator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisNoiseGenerator.java index 72696a65a..c49cb29b0 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisNoiseGenerator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisNoiseGenerator.java @@ -22,9 +22,9 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java b/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java index c8e8ee613..29cda0ad6 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java @@ -27,24 +27,24 @@ import art.arcane.iris.engine.framework.PlacedObject; import art.arcane.iris.engine.framework.placer.HeightmapObjectPlacer; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.context.IrisContext; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.data.VectorMap; +import art.arcane.iris.util.project.context.IrisContext; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.common.data.VectorMap; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.math.*; +import art.arcane.iris.util.common.math.*; import art.arcane.volmlib.util.matter.MatterMarker; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.common.plugin.VolmitSender; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.scheduling.jobs.Job; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.common.scheduling.jobs.Job; +import art.arcane.iris.util.project.stream.ProceduralStream; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java index 4bcd4ddb1..70b3597af 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java @@ -24,11 +24,11 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.DataProvider; import art.arcane.volmlib.util.data.WeightedRandom; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectReplace.java b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectReplace.java index 773cdc5ca..56b4f27e0 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectReplace.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectReplace.java @@ -23,7 +23,7 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisOreGenerator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisOreGenerator.java index 2024eaf9a..63065776b 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisOreGenerator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisOreGenerator.java @@ -22,7 +22,7 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisRavine.java b/core/src/main/java/art/arcane/iris/engine/object/IrisRavine.java index 152e394ec..8c2420106 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisRavine.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisRavine.java @@ -30,8 +30,8 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterCavern; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisRegion.java b/core/src/main/java/art/arcane/iris/engine/object/IrisRegion.java index e7f2bdf0c..34ae538da 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisRegion.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisRegion.java @@ -27,13 +27,13 @@ import art.arcane.iris.engine.object.annotations.*; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.DataProvider; import art.arcane.volmlib.util.data.VanillaBiomeMap; import art.arcane.volmlib.util.inventorygui.RandomColor; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisScript.java b/core/src/main/java/art/arcane/iris/engine/object/IrisScript.java index 540d9bf0c..026bee7c7 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisScript.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisScript.java @@ -20,7 +20,7 @@ package art.arcane.iris.engine.object; import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisSpawner.java b/core/src/main/java/art/arcane/iris/engine/object/IrisSpawner.java index 2dd4778dd..8cce9948c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisSpawner.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisSpawner.java @@ -24,7 +24,7 @@ import art.arcane.iris.engine.object.annotations.ArrayType; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisStructurePopulator.java b/core/src/main/java/art/arcane/iris/engine/object/IrisStructurePopulator.java index 7546aad94..73ee2811c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisStructurePopulator.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisStructurePopulator.java @@ -6,7 +6,7 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.math.Position2; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import org.jetbrains.annotations.Nullable; import java.util.List; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisStyledRange.java b/core/src/main/java/art/arcane/iris/engine/object/IrisStyledRange.java index 4c0b84d32..daa1bd76c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisStyledRange.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisStyledRange.java @@ -23,8 +23,8 @@ import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Snippet; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisWorm.java b/core/src/main/java/art/arcane/iris/engine/object/IrisWorm.java index 63e9984f1..73ce410eb 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisWorm.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisWorm.java @@ -25,7 +25,7 @@ import art.arcane.iris.engine.object.annotations.Snippet; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/engine/object/LegacyTileData.java b/core/src/main/java/art/arcane/iris/engine/object/LegacyTileData.java index f8378d822..c0951bd61 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/LegacyTileData.java +++ b/core/src/main/java/art/arcane/iris/engine/object/LegacyTileData.java @@ -4,7 +4,7 @@ import art.arcane.iris.core.nms.container.Pair; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/engine/object/NoiseStyle.java b/core/src/main/java/art/arcane/iris/engine/object/NoiseStyle.java index b64c60fd1..b67b20dbf 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/NoiseStyle.java +++ b/core/src/main/java/art/arcane/iris/engine/object/NoiseStyle.java @@ -20,10 +20,10 @@ package art.arcane.iris.engine.object; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.noise.CNGFactory; -import art.arcane.iris.util.noise.NoiseType; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.noise.CNGFactory; +import art.arcane.iris.util.project.noise.NoiseType; +import art.arcane.iris.util.project.stream.ProceduralStream; @Desc("Styles of noise") public enum NoiseStyle { @Desc("White Noise is like static. Useful for block scattering but not terrain.") diff --git a/core/src/main/java/art/arcane/iris/engine/object/matter/IrisMatterObject.java b/core/src/main/java/art/arcane/iris/engine/object/matter/IrisMatterObject.java index 5d6152453..8df4d271a 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/matter/IrisMatterObject.java +++ b/core/src/main/java/art/arcane/iris/engine/object/matter/IrisMatterObject.java @@ -2,11 +2,11 @@ package art.arcane.iris.engine.object.matter; import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.iris.engine.object.IrisObject; -import art.arcane.iris.util.matter.IrisMatterSupport; +import art.arcane.iris.util.project.matter.IrisMatterSupport; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.matter.IrisMatter; import art.arcane.volmlib.util.matter.Matter; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/engine/platform/BukkitChunkGenerator.java b/core/src/main/java/art/arcane/iris/engine/platform/BukkitChunkGenerator.java index cab2859bf..53b23c796 100644 --- a/core/src/main/java/art/arcane/iris/engine/platform/BukkitChunkGenerator.java +++ b/core/src/main/java/art/arcane/iris/engine/platform/BukkitChunkGenerator.java @@ -36,11 +36,11 @@ import art.arcane.iris.engine.object.StudioMode; import art.arcane.iris.engine.platform.studio.StudioGenerator; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.data.IrisBiomeStorage; -import art.arcane.iris.util.hunk.view.BiomeGridHunkHolder; -import art.arcane.iris.util.hunk.view.ChunkDataHunkHolder; +import art.arcane.iris.util.project.hunk.view.BiomeGridHunkHolder; +import art.arcane.iris.util.project.hunk.view.ChunkDataHunkHolder; import art.arcane.volmlib.util.io.ReactiveFolder; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.Looper; import io.papermc.lib.PaperLib; import lombok.Data; diff --git a/core/src/main/java/art/arcane/iris/engine/platform/PlatformChunkGenerator.java b/core/src/main/java/art/arcane/iris/engine/platform/PlatformChunkGenerator.java index e772d0127..de91830ad 100644 --- a/core/src/main/java/art/arcane/iris/engine/platform/PlatformChunkGenerator.java +++ b/core/src/main/java/art/arcane/iris/engine/platform/PlatformChunkGenerator.java @@ -22,7 +22,7 @@ import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineTarget; import art.arcane.iris.engine.framework.Hotloadable; -import art.arcane.iris.util.data.DataProvider; +import art.arcane.iris.util.common.data.DataProvider; import org.bukkit.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/core/src/main/java/art/arcane/iris/util/common/board/BoardEntry.java b/core/src/main/java/art/arcane/iris/util/common/board/BoardEntry.java index 3b9b6067d..8d3b11361 100644 --- a/core/src/main/java/art/arcane/iris/util/common/board/BoardEntry.java +++ b/core/src/main/java/art/arcane/iris/util/common/board/BoardEntry.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.board; +package art.arcane.iris.util.common.board; public class BoardEntry { private final art.arcane.volmlib.util.board.BoardEntry delegate; diff --git a/core/src/main/java/art/arcane/iris/util/common/board/BoardSettings.java b/core/src/main/java/art/arcane/iris/util/common/board/BoardSettings.java index f97b9bc9e..07d27d748 100644 --- a/core/src/main/java/art/arcane/iris/util/common/board/BoardSettings.java +++ b/core/src/main/java/art/arcane/iris/util/common/board/BoardSettings.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.board; +package art.arcane.iris.util.common.board; import art.arcane.volmlib.util.board.BoardProvider; diff --git a/core/src/main/java/art/arcane/iris/util/common/board/ScoreDirection.java b/core/src/main/java/art/arcane/iris/util/common/board/ScoreDirection.java index 65bbfbde7..20119cde6 100644 --- a/core/src/main/java/art/arcane/iris/util/common/board/ScoreDirection.java +++ b/core/src/main/java/art/arcane/iris/util/common/board/ScoreDirection.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.board; +package art.arcane.iris.util.common.board; public enum ScoreDirection { UP, diff --git a/core/src/main/java/art/arcane/iris/util/common/data/B.java b/core/src/main/java/art/arcane/iris/util/common/data/B.java index 5e59fc210..839afd531 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/B.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/B.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data; +package art.arcane.iris.util.common.data; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; @@ -10,7 +10,7 @@ import art.arcane.iris.core.link.data.DataType; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; -import art.arcane.iris.util.data.registry.Materials; +import art.arcane.iris.util.common.data.registry.Materials; import it.unimi.dsi.fastutil.ints.IntSet; import org.bukkit.Material; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/BiomeMap.java b/core/src/main/java/art/arcane/iris/util/common/data/BiomeMap.java index 333f97028..0afba971d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/BiomeMap.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/BiomeMap.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data; +package art.arcane.iris.util.common.data; import art.arcane.iris.engine.object.IrisBiome; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/DataProvider.java b/core/src/main/java/art/arcane/iris/util/common/data/DataProvider.java index d91dc1998..5575c8157 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/DataProvider.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/DataProvider.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data; +package art.arcane.iris.util.common.data; import art.arcane.iris.core.loader.IrisData; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/IrisCustomData.java b/core/src/main/java/art/arcane/iris/util/common/data/IrisCustomData.java index a8884c7b7..15ebc41d2 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/IrisCustomData.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/IrisCustomData.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data; +package art.arcane.iris.util.common.data; import art.arcane.iris.core.link.Identifier; import art.arcane.volmlib.util.collection.KMap; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/VectorMap.java b/core/src/main/java/art/arcane/iris/util/common/data/VectorMap.java index fae2f22c1..056c45384 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/VectorMap.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/VectorMap.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data; +package art.arcane.iris.util.common.data; import art.arcane.volmlib.util.collection.KMap; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/BitStorage.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/BitStorage.java index 4a080d861..19ecad3ee 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/BitStorage.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/BitStorage.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import org.apache.commons.lang3.Validate; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/CountConsumer.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/CountConsumer.java index 002382edd..9038fc186 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/CountConsumer.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/CountConsumer.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; @FunctionalInterface public interface CountConsumer { diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/CrudeIncrementalIntIdentityHashBiMap.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/CrudeIncrementalIntIdentityHashBiMap.java index f22fbdbe1..1f19224ee 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/CrudeIncrementalIntIdentityHashBiMap.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/CrudeIncrementalIntIdentityHashBiMap.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import com.google.common.collect.Iterators; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/GlobalPalette.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/GlobalPalette.java index b2c2e5ca6..245104923 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/GlobalPalette.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/GlobalPalette.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import java.util.List; import java.util.function.Predicate; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/HashMapPalette.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/HashMapPalette.java index ed178af0e..08e95e663 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/HashMapPalette.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/HashMapPalette.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KMap; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMap.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMap.java index 923719d86..2b763eb3b 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMap.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMap.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; public interface IdMap extends Iterable { int getId(T paramT); diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMapper.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMapper.java index d2bb8ae57..69f8d5a30 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMapper.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/IdMapper.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import com.google.common.base.Predicates; import com.google.common.collect.Iterators; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/LinearPalette.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/LinearPalette.java index cbca06ac9..cd87b64e1 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/LinearPalette.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/LinearPalette.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import java.util.List; import java.util.concurrent.atomic.AtomicReferenceArray; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/Mth.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/Mth.java index 9ef9199e5..1065439b4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/Mth.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/Mth.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import java.util.Random; import java.util.UUID; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/Palette.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/Palette.java index 228320db0..48ce56920 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/Palette.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/Palette.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import java.util.List; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteAccess.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteAccess.java index 27282d468..926138267 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteAccess.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteAccess.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import art.arcane.volmlib.util.nbt.tag.CompoundTag; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteResize.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteResize.java index f07501ded..5c72c26fb 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteResize.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteResize.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; interface PaletteResize { int onResize(int paramInt, T paramT); diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteType.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteType.java index e9aee8dd5..edea162e2 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteType.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/PaletteType.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import art.arcane.volmlib.util.data.Varint; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/PalettedContainer.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/PalettedContainer.java index c6e216176..2cec291ba 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/PalettedContainer.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/PalettedContainer.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; import art.arcane.iris.Iris; import art.arcane.volmlib.util.math.M; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/palette/QuartPos.java b/core/src/main/java/art/arcane/iris/util/common/data/palette/QuartPos.java index f06071f82..d84a3f140 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/palette/QuartPos.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/palette/QuartPos.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.data.palette; +package art.arcane.iris.util.common.data.palette; public final class QuartPos { public static final int BITS = 2; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/Attributes.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/Attributes.java index 90245c297..8400d7b90 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/Attributes.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/Attributes.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import org.bukkit.attribute.Attribute; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/KeyedRegistry.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/KeyedRegistry.java index 1dfaa377b..64874211c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/KeyedRegistry.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/KeyedRegistry.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import art.arcane.volmlib.util.collection.KMap; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/Materials.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/Materials.java index 8474d4973..86fe59606 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/Materials.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/Materials.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import org.bukkit.Material; -import static art.arcane.iris.util.data.registry.RegistryUtil.find; +import static art.arcane.iris.util.common.data.registry.RegistryUtil.find; public class Materials { public static final Material GRASS = find(Material.class, "grass", "short_grass"); diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/Particles.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/Particles.java index ade440828..6f1386bc9 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/Particles.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/Particles.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import org.bukkit.Particle; -import static art.arcane.iris.util.data.registry.RegistryUtil.find; +import static art.arcane.iris.util.common.data.registry.RegistryUtil.find; public class Particles { public static final Particle CRIT_MAGIC = find(Particle.class, "crit_magic", "crit"); diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryTypeAdapter.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryTypeAdapter.java index d33f6fd9a..89523a1c5 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryTypeAdapter.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryTypeAdapter.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; diff --git a/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryUtil.java b/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryUtil.java index b77adb2e1..86d854928 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryUtil.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/registry/RegistryUtil.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.data.registry; +package art.arcane.iris.util.common.data.registry; import art.arcane.iris.core.nms.container.Pair; import art.arcane.iris.engine.data.cache.AtomicCache; @@ -19,7 +19,7 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import static art.arcane.iris.util.data.registry.KeyedRegistry.wrapped; +import static art.arcane.iris.util.common.data.registry.KeyedRegistry.wrapped; @SuppressWarnings("unchecked") public class RegistryUtil { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/DirectorContext.java b/core/src/main/java/art/arcane/iris/util/common/director/DirectorContext.java index a9b86e4f3..bfba53c03 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/DirectorContext.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/DirectorContext.java @@ -1,7 +1,7 @@ -package art.arcane.iris.util.director; +package art.arcane.iris.util.common.director; import art.arcane.volmlib.util.director.context.DirectorContextBase; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; public class DirectorContext { private static final DirectorContextBase context = new DirectorContextBase<>(); diff --git a/core/src/main/java/art/arcane/iris/util/common/director/DirectorContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/DirectorContextHandler.java index 5a58a1e6b..8fd18b646 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/DirectorContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/DirectorContextHandler.java @@ -1,9 +1,9 @@ -package art.arcane.iris.util.director; +package art.arcane.iris.util.common.director; import art.arcane.volmlib.util.director.context.DirectorContextHandlers; import art.arcane.volmlib.util.director.context.DirectorContextHandlerType; import art.arcane.iris.Iris; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import java.util.Map; @@ -12,7 +12,7 @@ public interface DirectorContextHandler extends DirectorContextHandlerType, DirectorContextHandler> buildContextHandlers() { return DirectorContextHandlers.buildOrEmpty( - Iris.initialize("art.arcane.iris.util.director.context"), + Iris.initialize("art.arcane.iris.util.common.director.context"), DirectorContextHandler.class, h -> ((DirectorContextHandler) h).getType(), e -> { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/DirectorExecutor.java b/core/src/main/java/art/arcane/iris/util/common/director/DirectorExecutor.java index e53c565b7..6c0c23169 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/DirectorExecutor.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/DirectorExecutor.java @@ -16,14 +16,14 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director; +package art.arcane.iris.util.common.director; import art.arcane.volmlib.util.director.DirectorExecutorBase; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import org.bukkit.entity.Player; public interface DirectorExecutor extends DirectorExecutorBase { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/DirectorParameterHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/DirectorParameterHandler.java index 9a9888aa5..ead5defa8 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/DirectorParameterHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/DirectorParameterHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director; +package art.arcane.iris.util.common.director; public interface DirectorParameterHandler extends DirectorExecutor, art.arcane.volmlib.util.director.DirectorParameterHandler { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/DirectorSystem.java b/core/src/main/java/art/arcane/iris/util/common/director/DirectorSystem.java index 6810f78a1..9226a9726 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/DirectorSystem.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/DirectorSystem.java @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director; +package art.arcane.iris.util.common.director; import art.arcane.volmlib.util.director.DirectorSystemSupport; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; public final class DirectorSystem { - public static final KList> handlers = Iris.initialize("art.arcane.iris.util.director.handlers", null).convert((i) -> (art.arcane.volmlib.util.director.DirectorParameterHandler) i); + public static final KList> handlers = Iris.initialize("art.arcane.iris.util.common.director.handlers", null).convert((i) -> (art.arcane.volmlib.util.director.DirectorParameterHandler) i); private DirectorSystem() { } diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/BiomeContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/BiomeContextHandler.java index dc29c4c49..0ea7024f6 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/BiomeContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/BiomeContextHandler.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; public class BiomeContextHandler implements DirectorContextHandler { public Class getType() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/DimensionContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/DimensionContextHandler.java index cc3485837..cb6ab3b81 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/DimensionContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/DimensionContextHandler.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.object.IrisDimension; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; public class DimensionContextHandler implements DirectorContextHandler { public Class getType() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/GeneratorContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/GeneratorContextHandler.java index c53fe0bb4..c3311a769 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/GeneratorContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/GeneratorContextHandler.java @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisGenerator; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; public class GeneratorContextHandler implements DirectorContextHandler { @Override diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/RegionContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/RegionContextHandler.java index 50cc52150..c35f77805 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/RegionContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/RegionContextHandler.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; public class RegionContextHandler implements DirectorContextHandler { public Class getType() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/VectorContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/VectorContextHandler.java index 08c8bee06..2fa2bdfa6 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/VectorContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/VectorContextHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; import org.bukkit.util.Vector; public class VectorContextHandler implements DirectorContextHandler { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/context/WorldContextHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/context/WorldContextHandler.java index f0f3a66c2..7bbf082ca 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/context/WorldContextHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/context/WorldContextHandler.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.director.context; +package art.arcane.iris.util.common.director.context; import art.arcane.volmlib.util.director.context.WorldContextHandlerBase; -import art.arcane.iris.util.director.DirectorContextHandler; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.director.DirectorContextHandler; +import art.arcane.iris.util.common.plugin.VolmitSender; import org.bukkit.World; public class WorldContextHandler extends WorldContextHandlerBase implements DirectorContextHandler { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BiomeHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BiomeHandler.java index e61e21587..dd89b2c7d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BiomeHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BiomeHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class BiomeHandler extends RegistrantHandler { public BiomeHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BlockVectorHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BlockVectorHandler.java index b0b00ca8a..60c74cb2a 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BlockVectorHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BlockVectorHandler.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; -import art.arcane.iris.util.director.DirectorContext; +import art.arcane.iris.util.common.director.DirectorContext; import art.arcane.volmlib.util.director.DirectorParameterHandler; -import art.arcane.iris.util.director.DirectorSystem; +import art.arcane.iris.util.common.director.DirectorSystem; import art.arcane.volmlib.util.director.handlers.base.BlockVectorHandlerBase; import art.arcane.volmlib.util.format.Form; import org.bukkit.FluidCollisionMode; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BooleanHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BooleanHandler.java index 702251455..24ae4ce7c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/BooleanHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/BooleanHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.BooleanHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ByteHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ByteHandler.java index 45b85fa73..f8886be55 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ByteHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ByteHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.ByteHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/CaveHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/CaveHandler.java index 9338d3350..972de2d94 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/CaveHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/CaveHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisCave; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class CaveHandler extends RegistrantHandler { public CaveHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DataVersionHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DataVersionHandler.java index 6d6e013d4..71f740502 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DataVersionHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DataVersionHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.core.nms.datapack.DataVersion; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DimensionHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DimensionHandler.java index 023a1afed..27c0b80b8 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DimensionHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DimensionHandler.java @@ -16,14 +16,14 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.object.IrisDimension; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; import java.util.Locale; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DoubleHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DoubleHandler.java index a0bfe7a59..dc82f8c55 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/DoubleHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/DoubleHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.DoubleHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/EntityHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/EntityHandler.java index 2f0ce7436..53c831a47 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/EntityHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/EntityHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisEntity; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class EntityHandler extends RegistrantHandler { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/FloatHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/FloatHandler.java index 2642efd0b..ba3d1b4e5 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/FloatHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/FloatHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.FloatHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/GeneratorHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/GeneratorHandler.java index e02d3b885..8d26677b9 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/GeneratorHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/GeneratorHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisGenerator; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class GeneratorHandler extends RegistrantHandler { public GeneratorHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/IntegerHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/IntegerHandler.java index 9bda2cddb..e845710e0 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/IntegerHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/IntegerHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.IntegerHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPieceHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPieceHandler.java index b342d1c29..100b32aa3 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPieceHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPieceHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisJigsawPiece; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class JigsawPieceHandler extends RegistrantHandler { public JigsawPieceHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPoolHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPoolHandler.java index e1ed7cd65..916f6e2be 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPoolHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawPoolHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisJigsawPool; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class JigsawPoolHandler extends RegistrantHandler { public JigsawPoolHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawStructureHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawStructureHandler.java index 02e75e30f..04a7991fc 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawStructureHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/JigsawStructureHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class JigsawStructureHandler extends RegistrantHandler { public JigsawStructureHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/LongHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/LongHandler.java index e09d7992e..e78712f22 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/LongHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/LongHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.LongHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/PlayerHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/PlayerHandler.java index 39523032e..ae4db26b5 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/PlayerHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/PlayerHandler.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.BukkitPlayerHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/RegionHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/RegionHandler.java index d7e7671e4..42e8d34c4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/RegionHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/RegionHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class RegionHandler extends RegistrantHandler { public RegionHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ScriptHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ScriptHandler.java index d26b56322..2b5e1655f 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ScriptHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ScriptHandler.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.iris.engine.object.IrisScript; -import art.arcane.iris.util.director.specialhandlers.RegistrantHandler; +import art.arcane.iris.util.common.director.specialhandlers.RegistrantHandler; public class ScriptHandler extends RegistrantHandler { public ScriptHandler() { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ShortHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ShortHandler.java index a93cf3bb1..292ecbad2 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/ShortHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/ShortHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.ShortHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/StringHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/StringHandler.java index 6b4b553c2..477f3b60c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/StringHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/StringHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.StringHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/VectorHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/VectorHandler.java index b319b6cec..45f31491d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/VectorHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/VectorHandler.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; -import art.arcane.iris.util.director.DirectorContext; +import art.arcane.iris.util.common.director.DirectorContext; import art.arcane.volmlib.util.director.DirectorParameterHandler; -import art.arcane.iris.util.director.DirectorSystem; +import art.arcane.iris.util.common.director.DirectorSystem; import art.arcane.volmlib.util.director.handlers.base.VectorHandlerBase; import art.arcane.volmlib.util.format.Form; import org.bukkit.FluidCollisionMode; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/handlers/WorldHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/handlers/WorldHandler.java index 276f1b70a..5516894af 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/handlers/WorldHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/handlers/WorldHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.handlers; +package art.arcane.iris.util.common.director.handlers; import art.arcane.volmlib.util.director.handlers.base.WorldHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/DummyHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/DummyHandler.java index 28ddc3594..d1edce376 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/DummyHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/DummyHandler.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.director.specialhandlers; +package art.arcane.iris.util.common.director.specialhandlers; import art.arcane.volmlib.util.director.handlers.base.DummyHandlerBase; import art.arcane.volmlib.util.director.DirectorParameterHandler; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullableDimensionHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullableDimensionHandler.java index b2f4c181a..fcfa38d80 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullableDimensionHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullableDimensionHandler.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.specialhandlers; +package art.arcane.iris.util.common.director.specialhandlers; import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.tools.IrisToolbelt; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullablePlayerHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullablePlayerHandler.java index 3b4e51962..7549c71e4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullablePlayerHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/NullablePlayerHandler.java @@ -1,9 +1,9 @@ -package art.arcane.iris.util.director.specialhandlers; +package art.arcane.iris.util.common.director.specialhandlers; import art.arcane.volmlib.util.director.handlers.base.NullablePlayerHandlerBase; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; import art.arcane.volmlib.util.director.DirectorParameterHandler; -import art.arcane.iris.util.director.handlers.PlayerHandler; +import art.arcane.iris.util.common.director.handlers.PlayerHandler; import org.bukkit.entity.Player; public class NullablePlayerHandler extends PlayerHandler implements DirectorParameterHandler { diff --git a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/ObjectHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/ObjectHandler.java index 2111bed30..713d3af38 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/ObjectHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/ObjectHandler.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.director.specialhandlers; +package art.arcane.iris.util.common.director.specialhandlers; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisData; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.director.DirectorParameterHandler; +import art.arcane.iris.util.common.director.DirectorParameterHandler; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; import java.io.File; diff --git a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/RegistrantHandler.java b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/RegistrantHandler.java index e58e24fac..2a66adf82 100644 --- a/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/RegistrantHandler.java +++ b/core/src/main/java/art/arcane/iris/util/common/director/specialhandlers/RegistrantHandler.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.director.specialhandlers; +package art.arcane.iris.util.common.director.specialhandlers; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.director.DirectorParameterHandler; +import art.arcane.iris.util.common.director.DirectorParameterHandler; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; import java.io.File; diff --git a/core/src/main/java/art/arcane/iris/util/common/format/C.java b/core/src/main/java/art/arcane/iris/util/common/format/C.java index 90e1b3c35..dba2f0a71 100644 --- a/core/src/main/java/art/arcane/iris/util/common/format/C.java +++ b/core/src/main/java/art/arcane/iris/util/common/format/C.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.format; +package art.arcane.iris.util.common.format; import art.arcane.iris.Iris; -import art.arcane.iris.util.plugin.VolmitSender; +import art.arcane.iris.util.common.plugin.VolmitSender; import net.kyori.adventure.text.minimessage.MiniMessage; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; diff --git a/core/src/main/java/art/arcane/iris/util/common/inventorygui/ElementEvent.java b/core/src/main/java/art/arcane/iris/util/common/inventorygui/ElementEvent.java index 1ff19c4f5..c64753b95 100644 --- a/core/src/main/java/art/arcane/iris/util/common/inventorygui/ElementEvent.java +++ b/core/src/main/java/art/arcane/iris/util/common/inventorygui/ElementEvent.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.inventorygui; +package art.arcane.iris.util.common.inventorygui; public enum ElementEvent { LEFT, diff --git a/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIStaticDecorator.java b/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIStaticDecorator.java index 40f4183d7..4bf5da6b0 100644 --- a/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIStaticDecorator.java +++ b/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIStaticDecorator.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.inventorygui; +package art.arcane.iris.util.common.inventorygui; import art.arcane.volmlib.util.inventorygui.WindowDecorator; diff --git a/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIVoidDecorator.java b/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIVoidDecorator.java index 892d0efc5..409f90c40 100644 --- a/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIVoidDecorator.java +++ b/core/src/main/java/art/arcane/iris/util/common/inventorygui/UIVoidDecorator.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.inventorygui; +package art.arcane.iris.util.common.inventorygui; import art.arcane.volmlib.util.inventorygui.WindowDecorator; diff --git a/core/src/main/java/art/arcane/iris/util/common/inventorygui/Window.java b/core/src/main/java/art/arcane/iris/util/common/inventorygui/Window.java index 00e3b510c..fa88b247d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/inventorygui/Window.java +++ b/core/src/main/java/art/arcane/iris/util/common/inventorygui/Window.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.inventorygui; +package art.arcane.iris.util.common.inventorygui; import art.arcane.volmlib.util.inventorygui.WindowDecorator; diff --git a/core/src/main/java/art/arcane/iris/util/common/inventorygui/WindowResolution.java b/core/src/main/java/art/arcane/iris/util/common/inventorygui/WindowResolution.java index 2dde25017..5ddf3595e 100644 --- a/core/src/main/java/art/arcane/iris/util/common/inventorygui/WindowResolution.java +++ b/core/src/main/java/art/arcane/iris/util/common/inventorygui/WindowResolution.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.inventorygui; +package art.arcane.iris.util.common.inventorygui; import org.bukkit.event.inventory.InventoryType; diff --git a/core/src/main/java/art/arcane/iris/util/common/math/AxisAlignedBB.java b/core/src/main/java/art/arcane/iris/util/common/math/AxisAlignedBB.java index 2af972460..d6bf5b9fb 100644 --- a/core/src/main/java/art/arcane/iris/util/common/math/AxisAlignedBB.java +++ b/core/src/main/java/art/arcane/iris/util/common/math/AxisAlignedBB.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.math; +package art.arcane.iris.util.common.math; import art.arcane.volmlib.util.math.AlignedPoint; import art.arcane.iris.engine.object.IrisPosition; diff --git a/core/src/main/java/art/arcane/iris/util/common/math/Direction.java b/core/src/main/java/art/arcane/iris/util/common/math/Direction.java index 46a3148c5..d33ab9f5a 100644 --- a/core/src/main/java/art/arcane/iris/util/common/math/Direction.java +++ b/core/src/main/java/art/arcane/iris/util/common/math/Direction.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.math; +package art.arcane.iris.util.common.math; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.data.Cuboid.CuboidDirection; diff --git a/core/src/main/java/art/arcane/iris/util/common/math/RNGV2.java b/core/src/main/java/art/arcane/iris/util/common/math/RNGV2.java index 00e69ddd0..ea41ef330 100644 --- a/core/src/main/java/art/arcane/iris/util/common/math/RNGV2.java +++ b/core/src/main/java/art/arcane/iris/util/common/math/RNGV2.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.math; +package art.arcane.iris.util.common.math; import java.nio.charset.StandardCharsets; import java.util.List; diff --git a/core/src/main/java/art/arcane/iris/util/common/math/Vector3i.java b/core/src/main/java/art/arcane/iris/util/common/math/Vector3i.java index 21aab4ac5..ce25eaa73 100644 --- a/core/src/main/java/art/arcane/iris/util/common/math/Vector3i.java +++ b/core/src/main/java/art/arcane/iris/util/common/math/Vector3i.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.math; +package art.arcane.iris.util.common.math; import org.bukkit.util.BlockVector; import org.bukkit.util.Vector; diff --git a/core/src/main/java/art/arcane/iris/util/common/math/VectorMath.java b/core/src/main/java/art/arcane/iris/util/common/math/VectorMath.java index 7eda6441b..ca4e81e5e 100644 --- a/core/src/main/java/art/arcane/iris/util/common/math/VectorMath.java +++ b/core/src/main/java/art/arcane/iris/util/common/math/VectorMath.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.math; +package art.arcane.iris.util.common.math; import org.bukkit.util.Vector; diff --git a/core/src/main/java/art/arcane/iris/util/common/misc/Bindings.java b/core/src/main/java/art/arcane/iris/util/common/misc/Bindings.java index df2df6084..a19accd5f 100644 --- a/core/src/main/java/art/arcane/iris/util/common/misc/Bindings.java +++ b/core/src/main/java/art/arcane/iris/util/common/misc/Bindings.java @@ -1,5 +1,8 @@ -package art.arcane.iris.util.misc; +package art.arcane.iris.util.common.misc; +import art.arcane.iris.util.project.sentry.Attachments; +import art.arcane.iris.util.project.sentry.IrisLogger; +import art.arcane.iris.util.project.sentry.ServerID; import com.google.gson.JsonSyntaxException; import art.arcane.iris.BuildConstants; import art.arcane.iris.Iris; @@ -8,13 +11,11 @@ import art.arcane.iris.core.nms.INMS; import art.arcane.iris.core.safeguard.IrisSafeguard; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.json.JSONException; import art.arcane.volmlib.util.reflect.ShadeFix; -import art.arcane.iris.util.scheduling.J; -import art.arcane.iris.util.sentry.Attachments; -import art.arcane.iris.util.sentry.IrisLogger; -import art.arcane.iris.util.sentry.ServerID; +import art.arcane.iris.util.common.scheduling.J; + import io.sentry.Sentry; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.platform.bukkit.BukkitAudiences; diff --git a/core/src/main/java/art/arcane/iris/util/common/misc/RegenRuntime.java b/core/src/main/java/art/arcane/iris/util/common/misc/RegenRuntime.java index 8f51f4a36..0b17e9b17 100644 --- a/core/src/main/java/art/arcane/iris/util/common/misc/RegenRuntime.java +++ b/core/src/main/java/art/arcane/iris/util/common/misc/RegenRuntime.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.misc; +package art.arcane.iris.util.common.misc; public final class RegenRuntime { private static final ThreadLocal RUN_ID = new ThreadLocal<>(); diff --git a/core/src/main/java/art/arcane/iris/util/common/misc/ServerProperties.java b/core/src/main/java/art/arcane/iris/util/common/misc/ServerProperties.java index 013e592f3..60f32d19c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/misc/ServerProperties.java +++ b/core/src/main/java/art/arcane/iris/util/common/misc/ServerProperties.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.misc; +package art.arcane.iris.util.common.misc; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/core/src/main/java/art/arcane/iris/util/common/misc/SlimJar.java b/core/src/main/java/art/arcane/iris/util/common/misc/SlimJar.java index 72d967d53..7c7520a63 100644 --- a/core/src/main/java/art/arcane/iris/util/common/misc/SlimJar.java +++ b/core/src/main/java/art/arcane/iris/util/common/misc/SlimJar.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.misc; +package art.arcane.iris.util.common.misc; import art.arcane.iris.Iris; import io.github.slimjar.app.builder.ApplicationBuilder; diff --git a/core/src/main/java/art/arcane/iris/util/common/misc/getHardware.java b/core/src/main/java/art/arcane/iris/util/common/misc/getHardware.java index 63daecc5d..de2ccec1e 100644 --- a/core/src/main/java/art/arcane/iris/util/common/misc/getHardware.java +++ b/core/src/main/java/art/arcane/iris/util/common/misc/getHardware.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.misc; +package art.arcane.iris.util.common.misc; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import org.jetbrains.annotations.Nullable; import oshi.SystemInfo; diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Chunk.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Chunk.java index 0dfd64872..7751fcf0e 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Chunk.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Chunk.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.nbt.mca; +package art.arcane.iris.util.nbt.common.mca; import art.arcane.volmlib.util.nbt.mca.MCAChunkSupport; import art.arcane.volmlib.util.nbt.tag.CompoundTag; diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAFile.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAFile.java index 1b5e1c47c..b8970740f 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAFile.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAFile.java @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.nbt.mca; +package art.arcane.iris.util.nbt.common.mca; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.nbt.mca.MCAFileSupport; import art.arcane.volmlib.util.nbt.mca.LoadFlags; import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import java.io.IOException; import java.io.RandomAccessFile; diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAUtil.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAUtil.java index 67aa4a994..19ed5119f 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAUtil.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/MCAUtil.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.nbt.mca; +package art.arcane.iris.util.nbt.common.mca; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.nbt.mca.LoadFlags; diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java index 25cb4a4a9..9b26c9942 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.nbt.mca; +package art.arcane.iris.util.nbt.common.mca; import art.arcane.iris.Iris; import art.arcane.iris.core.nms.INMS; @@ -25,10 +25,10 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.nbt.mca.MCAWorldStoreSupport; import art.arcane.volmlib.util.nbt.mca.MCAWorldRuntimeSupport; import art.arcane.volmlib.util.nbt.mca.NBTWorldSupport; -import art.arcane.iris.util.data.B; +import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.parallel.HyperLock; +import art.arcane.iris.util.common.parallel.HyperLock; import org.bukkit.NamespacedKey; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Section.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Section.java index 6074dcfa8..cf20bb3ce 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Section.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/Section.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.nbt.mca; +package art.arcane.iris.util.nbt.common.mca; import art.arcane.iris.core.nms.INMS; import art.arcane.volmlib.util.nbt.mca.LoadFlags; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/BurstExecutor.java b/core/src/main/java/art/arcane/iris/util/common/parallel/BurstExecutor.java index 5cba668ad..f16a9cc45 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/BurstExecutor.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/BurstExecutor.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.iris.Iris; import art.arcane.volmlib.util.parallel.BurstExecutorSupport; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/BurstedHunk.java b/core/src/main/java/art/arcane/iris/util/common/parallel/BurstedHunk.java index 353397691..58bd1df95 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/BurstedHunk.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/BurstedHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; public interface BurstedHunk extends Hunk, art.arcane.volmlib.util.parallel.BurstedHunk { } diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/GridLock.java b/core/src/main/java/art/arcane/iris/util/common/parallel/GridLock.java index 4469c9526..8e59640dc 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/GridLock.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/GridLock.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.iris.Iris; import art.arcane.volmlib.util.parallel.GridLockSupport; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/HyperLock.java b/core/src/main/java/art/arcane/iris/util/common/parallel/HyperLock.java index 26df98040..aeff7dc4e 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/HyperLock.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/HyperLock.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.iris.Iris; import art.arcane.volmlib.util.parallel.HyperLockSupport; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/MultiBurst.java b/core/src/main/java/art/arcane/iris/util/common/parallel/MultiBurst.java index 4b6d53895..4f11a4640 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/MultiBurst.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/MultiBurst.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/NOOPGridLock.java b/core/src/main/java/art/arcane/iris/util/common/parallel/NOOPGridLock.java index a1d55ee1e..09ca012eb 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/NOOPGridLock.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/NOOPGridLock.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.volmlib.util.parallel.NoopGridLockSupport; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/StreamUtils.java b/core/src/main/java/art/arcane/iris/util/common/parallel/StreamUtils.java index 4702e0daf..8649fd628 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/StreamUtils.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/StreamUtils.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.volmlib.util.parallel.StreamUtilsSupport; import art.arcane.volmlib.util.math.Position2; diff --git a/core/src/main/java/art/arcane/iris/util/common/parallel/SyncExecutor.java b/core/src/main/java/art/arcane/iris/util/common/parallel/SyncExecutor.java index 9e7c9a3b9..fb9722c38 100644 --- a/core/src/main/java/art/arcane/iris/util/common/parallel/SyncExecutor.java +++ b/core/src/main/java/art/arcane/iris/util/common/parallel/SyncExecutor.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.parallel; +package art.arcane.iris.util.common.parallel; import art.arcane.volmlib.util.parallel.SyncExecutorSupport; import art.arcane.volmlib.util.math.M; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Chunks.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Chunks.java index e0b7743da..0cbdc9056 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Chunks.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Chunks.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import org.bukkit.Location; import org.bukkit.World; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Command.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Command.java index 6ab6c27d7..7ac1f19ea 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Command.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Command.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/CommandDummy.java b/core/src/main/java/art/arcane/iris/util/common/plugin/CommandDummy.java index 9c46d5000..9263a64d3 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/CommandDummy.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/CommandDummy.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import org.bukkit.Server; import org.bukkit.command.CommandSender; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Control.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Control.java index d31915f5e..4a0170a82 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Control.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Control.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Controller.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Controller.java index a612a4a60..8628efe1d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Controller.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Controller.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/ICommand.java b/core/src/main/java/art/arcane/iris/util/common/plugin/ICommand.java index 20f43e0cb..aa231e69b 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/ICommand.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/ICommand.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/IController.java b/core/src/main/java/art/arcane/iris/util/common/plugin/IController.java index bc1ded134..38245d3a8 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/IController.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/IController.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import org.bukkit.event.Listener; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Instance.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Instance.java index 74b91d1a8..da2da9699 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Instance.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Instance.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/IrisService.java b/core/src/main/java/art/arcane/iris/util/common/plugin/IrisService.java index f2c613456..06fa6fafb 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/IrisService.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/IrisService.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import org.bukkit.event.Listener; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/MortarCommand.java b/core/src/main/java/art/arcane/iris/util/common/plugin/MortarCommand.java index e7474b84a..a3201cf76 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/MortarCommand.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/MortarCommand.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import org.bukkit.Sound; import java.lang.reflect.Field; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/MortarPermission.java b/core/src/main/java/art/arcane/iris/util/common/plugin/MortarPermission.java index c8ce8ed24..7b57534d0 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/MortarPermission.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/MortarPermission.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/Permission.java b/core/src/main/java/art/arcane/iris/util/common/plugin/Permission.java index fb8a20c5a..b10f9dde8 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/Permission.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/Permission.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistry.java b/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistry.java index c6db2dafe..a568883e0 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistry.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistry.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistryGroup.java b/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistryGroup.java index fbe08b73c..20b7f01e1 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistryGroup.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/PluginRegistryGroup.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/RouterCommand.java b/core/src/main/java/art/arcane/iris/util/common/plugin/RouterCommand.java index 4a9fcfb3f..7560176f4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/RouterCommand.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/RouterCommand.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/VirtualCommand.java b/core/src/main/java/art/arcane/iris/util/common/plugin/VirtualCommand.java index 4f6cac945..0b5f709e4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/VirtualCommand.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/VirtualCommand.java @@ -16,14 +16,14 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.format.C; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.reflect.V; import org.bukkit.Sound; import org.bukkit.command.CommandSender; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitPlugin.java b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitPlugin.java index 7f084cd4b..0e868832b 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitPlugin.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitPlugin.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; @@ -24,7 +24,7 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.reflect.V; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.*; @@ -317,11 +317,11 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener { commandCache = new KList<>(); for (Field i : getClass().getDeclaredFields()) { - if (i.isAnnotationPresent(art.arcane.iris.util.plugin.Command.class)) { + if (i.isAnnotationPresent(art.arcane.iris.util.common.plugin.Command.class)) { try { i.setAccessible(true); MortarCommand pc = (MortarCommand) i.getType().getConstructor().newInstance(); - art.arcane.iris.util.plugin.Command c = i.getAnnotation(art.arcane.iris.util.plugin.Command.class); + art.arcane.iris.util.common.plugin.Command c = i.getAnnotation(art.arcane.iris.util.common.plugin.Command.class); registerCommand(pc, c.value()); commandCache.add(pc); v("Registered Commands /" + pc.getNode() + " (" + i.getName() + ")"); diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java index 6d50212aa..8d41307a2 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.plugin; +package art.arcane.iris.util.common.plugin; import art.arcane.iris.Iris; import art.arcane.iris.core.IrisSettings; @@ -24,11 +24,11 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.director.visual.DirectorVisualCommand; import art.arcane.volmlib.util.director.visual.DirectorVisualCommand.DirectorVisualParameter; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java b/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java index e846c0f96..b0c024374 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.plugin.chunk; +package art.arcane.iris.util.common.plugin.chunk; import art.arcane.iris.Iris; import lombok.NonNull; diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/TicketHolder.java b/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/TicketHolder.java index 0b4a2c53a..714f29878 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/TicketHolder.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/chunk/TicketHolder.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.plugin.chunk; +package art.arcane.iris.util.common.plugin.chunk; import art.arcane.iris.Iris; import art.arcane.iris.engine.data.cache.Cache; diff --git a/core/src/main/java/art/arcane/iris/util/common/reflect/KeyedType.java b/core/src/main/java/art/arcane/iris/util/common/reflect/KeyedType.java index 312bc711d..5995e1d5c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/reflect/KeyedType.java +++ b/core/src/main/java/art/arcane/iris/util/common/reflect/KeyedType.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.reflect; +package art.arcane.iris.util.common.reflect; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.reflect.TypeToken; -import art.arcane.iris.util.data.registry.RegistryTypeAdapter; -import art.arcane.iris.util.data.registry.RegistryUtil; +import art.arcane.iris.util.common.data.registry.RegistryTypeAdapter; +import art.arcane.iris.util.common.data.registry.RegistryUtil; import org.bukkit.Keyed; public class KeyedType { diff --git a/core/src/main/java/art/arcane/iris/util/common/reflect/OldEnum.java b/core/src/main/java/art/arcane/iris/util/common/reflect/OldEnum.java index 64be15859..8fc97251b 100644 --- a/core/src/main/java/art/arcane/iris/util/common/reflect/OldEnum.java +++ b/core/src/main/java/art/arcane/iris/util/common/reflect/OldEnum.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.reflect; +package art.arcane.iris.util.common.reflect; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; diff --git a/core/src/main/java/art/arcane/iris/util/common/reflect/W.java b/core/src/main/java/art/arcane/iris/util/common/reflect/W.java index 3a6d9afd4..7d04f895c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/reflect/W.java +++ b/core/src/main/java/art/arcane/iris/util/common/reflect/W.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.reflect; +package art.arcane.iris.util.common.reflect; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedField.java b/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedField.java index be316a7d9..9ec5ee575 100644 --- a/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedField.java +++ b/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedField.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.reflect; +package art.arcane.iris.util.common.reflect; import art.arcane.iris.Iris; diff --git a/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedReturningMethod.java b/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedReturningMethod.java index dd06d59da..f5cf17b36 100644 --- a/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedReturningMethod.java +++ b/core/src/main/java/art/arcane/iris/util/common/reflect/WrappedReturningMethod.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.reflect; +package art.arcane.iris.util.common.reflect; import art.arcane.iris.Iris; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/J.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/J.java index e69ba8e2e..f65643b75 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/J.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/J.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling; +package art.arcane.iris.util.common.scheduling; import art.arcane.iris.Iris; import art.arcane.iris.core.service.PreservationSVC; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.MultiBurst; import art.arcane.volmlib.util.function.NastyFunction; import art.arcane.volmlib.util.function.NastyFuture; import art.arcane.volmlib.util.function.NastyRunnable; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/DownloadJob.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/DownloadJob.java index 21bb09b96..eed276a31 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/DownloadJob.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/DownloadJob.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; import art.arcane.volmlib.util.network.DL; import art.arcane.volmlib.util.network.DownloadMonitor; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/Job.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/Job.java index 9d0ca75c6..70c4e879a 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/Job.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/Job.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; -import art.arcane.iris.util.format.C; +import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; -import art.arcane.iris.util.plugin.VolmitSender; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.plugin.VolmitSender; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import java.util.concurrent.CompletableFuture; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/JobCollection.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/JobCollection.java index 9ac378f86..fdff8f96b 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/JobCollection.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/JobCollection.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelQueueJob.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelQueueJob.java index 1f80d2a62..8999d9d7c 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelQueueJob.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelQueueJob.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; public abstract class ParallelQueueJob extends QueueJob { @Override diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelRadiusJob.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelRadiusJob.java index 3a879cc3f..4a9784d82 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelRadiusJob.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/ParallelRadiusJob.java @@ -1,7 +1,7 @@ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; import art.arcane.volmlib.util.math.Spiraler; -import art.arcane.iris.util.parallel.MultiBurst; +import art.arcane.iris.util.common.parallel.MultiBurst; import lombok.SneakyThrows; import lombok.Synchronized; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/QueueJob.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/QueueJob.java index d140fa706..967c7e72d 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/QueueJob.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/QueueJob.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/SingleJob.java b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/SingleJob.java index 4ce2437be..57dcbe465 100644 --- a/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/SingleJob.java +++ b/core/src/main/java/art/arcane/iris/util/common/scheduling/jobs/SingleJob.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.scheduling.jobs; +package art.arcane.iris.util.common.scheduling.jobs; public class SingleJob implements Job { private final String name; diff --git a/core/src/main/java/art/arcane/iris/util/project/agent/Agent.java b/core/src/main/java/art/arcane/iris/util/project/agent/Agent.java index 616b67efc..8c61abde1 100644 --- a/core/src/main/java/art/arcane/iris/util/project/agent/Agent.java +++ b/core/src/main/java/art/arcane/iris/util/project/agent/Agent.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.agent; +package art.arcane.iris.util.project.agent; import art.arcane.iris.Iris; import net.bytebuddy.agent.ByteBuddyAgent; @@ -11,7 +11,7 @@ import java.nio.file.Files; import java.nio.file.StandardCopyOption; public class Agent { - private static final String NAME = "art.arcane.iris.util.agent.Installer"; + private static final String NAME = "art.arcane.iris.util.project.agent.Installer"; public static final File AGENT_JAR = new File(Iris.instance.getDataFolder(), "agent.jar"); public static ClassReloadingStrategy installed() { diff --git a/core/src/main/java/art/arcane/iris/util/project/context/IrisContext.java b/core/src/main/java/art/arcane/iris/util/project/context/IrisContext.java index 5448cbe0b..a763b699e 100644 --- a/core/src/main/java/art/arcane/iris/util/project/context/IrisContext.java +++ b/core/src/main/java/art/arcane/iris/util/project/context/IrisContext.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.context; +package art.arcane.iris.util.project.context; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisData; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/Hunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/Hunk.java index 5cc553ca6..9c68497d4 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/Hunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/Hunk.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk; +package art.arcane.iris.util.project.hunk; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.IrisPosition; @@ -27,14 +27,14 @@ import art.arcane.volmlib.util.hunk.HunkInterpolationSupport; import art.arcane.volmlib.util.hunk.HunkMutationSupport; import art.arcane.volmlib.util.hunk.HunkSectionSupport; import art.arcane.volmlib.util.hunk.HunkLike; -import art.arcane.iris.util.hunk.storage.*; -import art.arcane.iris.util.hunk.view.*; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.InterpolationMethod3D; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.hunk.storage.*; +import art.arcane.iris.util.project.hunk.view.*; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.InterpolationMethod3D; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.math.BlockPosition; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; import org.bukkit.Chunk; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/HunkFace.java b/core/src/main/java/art/arcane/iris/util/project/hunk/HunkFace.java index 181eb9584..ec8e58a21 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/HunkFace.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/HunkFace.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk; +package art.arcane.iris.util.project.hunk; public enum HunkFace { TOP(art.arcane.volmlib.util.hunk.HunkFace.TOP), diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/SharedHunkAdapter.java b/core/src/main/java/art/arcane/iris/util/project/hunk/SharedHunkAdapter.java index 300965476..2239243c5 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/SharedHunkAdapter.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/SharedHunkAdapter.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.hunk; +package art.arcane.iris.util.project.hunk; import art.arcane.volmlib.util.hunk.HunkLike; final class SharedHunkAdapter implements Hunk { diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/ArrayHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/ArrayHunk.java index b0db71292..57a418f6d 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/ArrayHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/ArrayHunk.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; import art.arcane.iris.engine.data.cache.Cache; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicDoubleHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicDoubleHunk.java index 3f7cb1bff..10b395a59 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicDoubleHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicDoubleHunk.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; import com.google.common.util.concurrent.AtomicDoubleArray; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicHunk.java index 149ad23d1..a1edac7b1 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicIntegerHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicIntegerHunk.java index d828e8105..24672403b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicIntegerHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicIntegerHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicLongHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicLongHunk.java index 2718f5106..89c76128f 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicLongHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/AtomicLongHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/PaletteOrHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/PaletteOrHunk.java index 8cfcb0dfb..5670a6638 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/PaletteOrHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/PaletteOrHunk.java @@ -1,8 +1,8 @@ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; import art.arcane.volmlib.util.function.Consumer4; import art.arcane.volmlib.util.function.Consumer4IO; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.hunk.bits.DataContainer; import art.arcane.volmlib.util.hunk.bits.Writable; import java.io.IOException; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/StorageHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/StorageHunk.java index 26a5f9472..feac57805 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/StorageHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/StorageHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; @Data diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/SynchronizedArrayHunk.java b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/SynchronizedArrayHunk.java index ebe844563..4395a1b5a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/storage/SynchronizedArrayHunk.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/storage/SynchronizedArrayHunk.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.storage; +package art.arcane.iris.util.project.hunk.storage; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkHolder.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkHolder.java index 224a72b61..3c13b24f4 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkHolder.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkHolder.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.data.chunk.LinkedTerrainChunk; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.hunk.view.BiomeGridForceSupport; import org.bukkit.block.Biome; import org.bukkit.generator.ChunkGenerator.BiomeGrid; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkView.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkView.java index bca18cd0d..c75dba7ba 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkView.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/BiomeGridHunkView.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.data.chunk.LinkedTerrainChunk; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.hunk.view.BiomeGridForceSupport; import org.bukkit.block.Biome; import org.bukkit.generator.ChunkGenerator.BiomeGrid; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkBiomeHunkView.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkBiomeHunkView.java index 29da8e789..8bf0dc67c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkBiomeHunkView.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkBiomeHunkView.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; import art.arcane.iris.Iris; import art.arcane.iris.core.service.EditSVC; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.Chunk; import org.bukkit.block.Biome; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkHolder.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkHolder.java index b0a8cd3bf..0513a688d 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkHolder.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkHolder.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; -import art.arcane.iris.util.hunk.storage.AtomicHunk; +import art.arcane.iris.util.project.hunk.storage.AtomicHunk; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.generator.ChunkGenerator.ChunkData; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java index 81327b43a..2ef27c924 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; -import art.arcane.iris.util.data.B; -import art.arcane.iris.util.data.IrisCustomData; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.common.data.B; +import art.arcane.iris.util.common.data.IrisCustomData; +import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.block.data.BlockData; import org.bukkit.generator.ChunkGenerator.ChunkData; diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkHunkView.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkHunkView.java index d384f3162..68fb9b51e 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkHunkView.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkHunkView.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.hunk.view; +package art.arcane.iris.util.project.hunk.view; import art.arcane.iris.Iris; import art.arcane.iris.core.service.EditSVC; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.Chunk; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod.java b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod.java index bdbeb3e4e..167449f64 100644 --- a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod.java +++ b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.interpolation; +package art.arcane.iris.util.project.interpolation; import art.arcane.iris.engine.object.annotations.Desc; diff --git a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod3D.java b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod3D.java index b48696ff2..57251bca8 100644 --- a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod3D.java +++ b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationMethod3D.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.interpolation; +package art.arcane.iris.util.project.interpolation; import art.arcane.iris.engine.object.annotations.Desc; diff --git a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationType.java b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationType.java index c01fc5e63..03a3b8279 100644 --- a/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationType.java +++ b/core/src/main/java/art/arcane/iris/util/project/interpolation/InterpolationType.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.interpolation; +package art.arcane.iris.util.project.interpolation; public enum InterpolationType { LINEAR, diff --git a/core/src/main/java/art/arcane/iris/util/project/interpolation/IrisInterpolation.java b/core/src/main/java/art/arcane/iris/util/project/interpolation/IrisInterpolation.java index 9209ce313..03619bba4 100644 --- a/core/src/main/java/art/arcane/iris/util/project/interpolation/IrisInterpolation.java +++ b/core/src/main/java/art/arcane/iris/util/project/interpolation/IrisInterpolation.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.interpolation; +package art.arcane.iris.util.project.interpolation; import com.google.common.util.concurrent.AtomicDouble; import art.arcane.volmlib.util.interpolation.Starcast; @@ -25,9 +25,9 @@ import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.function.Consumer2; import art.arcane.volmlib.util.function.NoiseProvider; import art.arcane.volmlib.util.function.NoiseProvider3; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import java.math.BigDecimal; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/IrisMatterSupport.java b/core/src/main/java/art/arcane/iris/util/project/matter/IrisMatterSupport.java index 46c4f4b66..c7f3bb928 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/IrisMatterSupport.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/IrisMatterSupport.java @@ -16,14 +16,15 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter; +package art.arcane.iris.util.project.matter; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.IrisObject; -import art.arcane.iris.util.matter.slices.EntityMatter; -import art.arcane.iris.util.matter.slices.IdentifierMatter; -import art.arcane.iris.util.matter.slices.SpawnerMatter; -import art.arcane.iris.util.matter.slices.TileMatter; + +import art.arcane.iris.util.project.matter.slices.EntityMatter; +import art.arcane.iris.util.project.matter.slices.IdentifierMatter; +import art.arcane.iris.util.project.matter.slices.SpawnerMatter; +import art.arcane.iris.util.project.matter.slices.TileMatter; import art.arcane.volmlib.util.matter.IrisMatter; import art.arcane.volmlib.util.matter.Matter; import org.bukkit.block.data.BlockData; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/TileWrapper.java b/core/src/main/java/art/arcane/iris/util/project/matter/TileWrapper.java index 751e4497a..dc9082c1d 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/TileWrapper.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/TileWrapper.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter; +package art.arcane.iris.util.project.matter; import art.arcane.iris.engine.object.TileData; import lombok.Data; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/WorldMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/WorldMatter.java index 38be2bdf7..46417b742 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/WorldMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/WorldMatter.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter; +package art.arcane.iris.util.project.matter; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.TileData; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/slices/EntityMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/slices/EntityMatter.java index 010c5dcd0..7d67a56fc 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/slices/EntityMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/slices/EntityMatter.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter.slices; +package art.arcane.iris.util.project.matter.slices; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.object.IrisPosition; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/slices/IdentifierMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/slices/IdentifierMatter.java index cc9699fc7..fbbdb254a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/slices/IdentifierMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/slices/IdentifierMatter.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.matter.slices; +package art.arcane.iris.util.project.matter.slices; import art.arcane.iris.core.link.Identifier; import art.arcane.volmlib.util.data.palette.Palette; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/slices/RegistryMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/slices/RegistryMatter.java index 4a65f06f1..2cb4f89ad 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/slices/RegistryMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/slices/RegistryMatter.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter.slices; +package art.arcane.iris.util.project.matter.slices; import art.arcane.iris.core.loader.IrisRegistrant; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.data.palette.Palette; import art.arcane.volmlib.util.matter.slices.RawMatter; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/slices/SpawnerMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/slices/SpawnerMatter.java index 0315072f2..93bcbe9cb 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/slices/SpawnerMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/slices/SpawnerMatter.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter.slices; +package art.arcane.iris.util.project.matter.slices; import art.arcane.iris.engine.object.IrisSpawner; import art.arcane.volmlib.util.matter.Sliced; diff --git a/core/src/main/java/art/arcane/iris/util/project/matter/slices/TileMatter.java b/core/src/main/java/art/arcane/iris/util/project/matter/slices/TileMatter.java index 9c3ca14a4..c52f5c668 100644 --- a/core/src/main/java/art/arcane/iris/util/project/matter/slices/TileMatter.java +++ b/core/src/main/java/art/arcane/iris/util/project/matter/slices/TileMatter.java @@ -16,10 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.matter.slices; +package art.arcane.iris.util.project.matter.slices; import art.arcane.iris.engine.object.TileData; -import art.arcane.iris.util.matter.TileWrapper; + +import art.arcane.iris.util.project.matter.TileWrapper; import art.arcane.volmlib.util.data.palette.Palette; import art.arcane.volmlib.util.matter.Sliced; import art.arcane.volmlib.util.matter.slices.RawMatter; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CNG.java b/core/src/main/java/art/arcane/iris/util/project/noise/CNG.java index 31beeb569..e572d9a55 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CNG.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CNG.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.IRare; @@ -25,12 +25,12 @@ import art.arcane.volmlib.util.cache.FloatCache; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.function.NoiseInjector; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.arithmetic.FittedStream; -import art.arcane.iris.util.stream.sources.CNGStream; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.arithmetic.FittedStream; +import art.arcane.iris.util.project.stream.sources.CNGStream; import lombok.Data; import java.io.DataOutputStream; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CNGFactory.java b/core/src/main/java/art/arcane/iris/util/project/noise/CNGFactory.java index 03936b918..058883445 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CNGFactory.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CNGFactory.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoise.java index 36130a488..1a03346c8 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; public class CachedNoise implements NoiseGenerator { private final CachedNoiseMap n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoiseMap.java b/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoiseMap.java index 414a04579..882f0ee09 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoiseMap.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CachedNoiseMap.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.hunk.bits.Writable; import art.arcane.volmlib.util.matter.IrisMatter; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CellGenerator.java b/core/src/main/java/art/arcane/iris/util/project/noise/CellGenerator.java index 75e9f9524..a6a354e1b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CellGenerator.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CellGenerator.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; import lombok.Getter; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CellHeightNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/CellHeightNoise.java index 481e63cdb..f478bfc90 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CellHeightNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CellHeightNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CellularNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/CellularNoise.java index 40cd31db4..2218229a5 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CellularNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CellularNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CloverNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/CloverNoise.java index 17bdd6f69..5d1caab00 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CloverNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CloverNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; public class CloverNoise implements NoiseGenerator { private final Noise2D n2; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/CubicNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/CubicNoise.java index 0d6c76821..eef6afae9 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/CubicNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/CubicNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/ExpressionNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/ExpressionNoise.java index ea809aa68..3327bf871 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/ExpressionNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/ExpressionNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.iris.engine.object.IrisExpression; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FastNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FastNoise.java index b7a039a5b..3e97fe38a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FastNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FastNoise.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.Vector2f; import art.arcane.volmlib.util.math.Vector3f; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class FastNoise { private static final Float2[] GRAD_2D = {new Float2(-1, -1), new Float2(1, -1), new Float2(-1, 1), new Float2(1, 1), new Float2(0, -1), new Float2(-1, 0), new Float2(0, 1), new Float2(1, 0), }; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FastNoiseDouble.java b/core/src/main/java/art/arcane/iris/util/project/noise/FastNoiseDouble.java index b9bbf31b7..de0e0fe1a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FastNoiseDouble.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FastNoiseDouble.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.Vector2f; import art.arcane.volmlib.util.math.Vector3f; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FlatNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FlatNoise.java index 8ccb8a951..611192808 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FlatNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FlatNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; public class FlatNoise implements NoiseGenerator { public FlatNoise(long seed) { diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowPerlinNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowPerlinNoise.java index 43121a234..65e205fbf 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowPerlinNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowPerlinNoise.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.FastNoiseDouble.FractalType; +import art.arcane.iris.util.project.noise.FastNoiseDouble.FractalType; public class FractalBillowPerlinNoise implements NoiseGenerator, OctaveNoise { private final FastNoiseDouble n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowSimplexNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowSimplexNoise.java index 0e0809d0d..aa05c56df 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowSimplexNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FractalBillowSimplexNoise.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.FastNoiseDouble.FractalType; +import art.arcane.iris.util.project.noise.FastNoiseDouble.FractalType; public class FractalBillowSimplexNoise implements NoiseGenerator, OctaveNoise { private final FastNoiseDouble n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FractalCubicNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FractalCubicNoise.java index 50881a56c..65ec7e0f3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FractalCubicNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FractalCubicNoise.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.FastNoiseDouble.FractalType; +import art.arcane.iris.util.project.noise.FastNoiseDouble.FractalType; public class FractalCubicNoise implements NoiseGenerator { private final FastNoiseDouble n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FractalFBMSimplexNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FractalFBMSimplexNoise.java index 8c9c6e427..61b6e9448 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FractalFBMSimplexNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FractalFBMSimplexNoise.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.FastNoiseDouble.FractalType; +import art.arcane.iris.util.project.noise.FastNoiseDouble.FractalType; public class FractalFBMSimplexNoise implements NoiseGenerator, OctaveNoise { private final FastNoiseDouble n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/FractalRigidMultiSimplexNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/FractalRigidMultiSimplexNoise.java index 1cd8708f5..896091156 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/FractalRigidMultiSimplexNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/FractalRigidMultiSimplexNoise.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.FastNoiseDouble.FractalType; +import art.arcane.iris.util.project.noise.FastNoiseDouble.FractalType; public class FractalRigidMultiSimplexNoise implements NoiseGenerator, OctaveNoise { private final FastNoiseDouble n; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/GlobNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/GlobNoise.java index 03b7fdbfc..aedcfbb1a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/GlobNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/GlobNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/ImageNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/ImageNoise.java index 3ae0d10e0..31a66571e 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/ImageNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/ImageNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.object.IrisImageMap; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/InterpolatedNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/InterpolatedNoise.java index 0dd6d6967..0991b458a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/InterpolatedNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/InterpolatedNoise.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; public class InterpolatedNoise implements NoiseGenerator { private final InterpolationMethod method; private final NoiseProvider p; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseFactory.java b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseFactory.java index 98aa46e90..222669cf8 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseFactory.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseFactory.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; @FunctionalInterface public interface NoiseFactory { diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseGenerator.java b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseGenerator.java index a556aef99..b7d10b529 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseGenerator.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseGenerator.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; public interface NoiseGenerator { double noise(double x); diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseType.java b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseType.java index 617ba8d86..cc23eb520 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/NoiseType.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/NoiseType.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.iris.core.IrisSettings; -import art.arcane.iris.util.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; public enum NoiseType { WHITE(WhiteNoise::new), WHITE_BILINEAR((s) -> new InterpolatedNoise(s, WHITE, InterpolationMethod.BILINEAR)), diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/OctaveNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/OctaveNoise.java index e80bd74a8..6f3ebd8bd 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/OctaveNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/OctaveNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; public interface OctaveNoise { void setOctaves(int o); diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/OffsetNoiseGenerator.java b/core/src/main/java/art/arcane/iris/util/project/noise/OffsetNoiseGenerator.java index e417bcb29..7c219471c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/OffsetNoiseGenerator.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/OffsetNoiseGenerator.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/PerlinNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/PerlinNoise.java index 4250a6a40..06b0672f7 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/PerlinNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/PerlinNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/RarityCellGenerator.java b/core/src/main/java/art/arcane/iris/util/project/noise/RarityCellGenerator.java index 2eadd65cd..2557e865b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/RarityCellGenerator.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/RarityCellGenerator.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.iris.engine.object.IRare; import art.arcane.volmlib.util.collection.KList; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/SimplexNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/SimplexNoise.java index bb6d82b1b..6cb8227c6 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/SimplexNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/SimplexNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/VascularNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/VascularNoise.java index aadc98332..cfa7e0487 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/VascularNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/VascularNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/noise/WhiteNoise.java b/core/src/main/java/art/arcane/iris/util/project/noise/WhiteNoise.java index 4b2fcb6c8..f929682a3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/noise/WhiteNoise.java +++ b/core/src/main/java/art/arcane/iris/util/project/noise/WhiteNoise.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.noise; +package art.arcane.iris.util.project.noise; import art.arcane.volmlib.util.math.RNG; diff --git a/core/src/main/java/art/arcane/iris/util/project/profile/LoadBalancer.java b/core/src/main/java/art/arcane/iris/util/project/profile/LoadBalancer.java index a8883e55b..0a893473a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/profile/LoadBalancer.java +++ b/core/src/main/java/art/arcane/iris/util/project/profile/LoadBalancer.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.profile; +package art.arcane.iris.util.project.profile; import art.arcane.iris.Iris; diff --git a/core/src/main/java/art/arcane/iris/util/project/profile/MsptTimings.java b/core/src/main/java/art/arcane/iris/util/project/profile/MsptTimings.java index ab5fbbeda..86322fed5 100644 --- a/core/src/main/java/art/arcane/iris/util/project/profile/MsptTimings.java +++ b/core/src/main/java/art/arcane/iris/util/project/profile/MsptTimings.java @@ -1,7 +1,7 @@ -package art.arcane.iris.util.profile; +package art.arcane.iris.util.project.profile; import art.arcane.volmlib.util.math.M; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.Looper; import java.util.concurrent.atomic.AtomicInteger; diff --git a/core/src/main/java/art/arcane/iris/util/project/sentry/Attachments.java b/core/src/main/java/art/arcane/iris/util/project/sentry/Attachments.java index eb19f41d4..026908c5c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/sentry/Attachments.java +++ b/core/src/main/java/art/arcane/iris/util/project/sentry/Attachments.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.sentry; +package art.arcane.iris.util.project.sentry; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/core/src/main/java/art/arcane/iris/util/project/sentry/IrisLogger.java b/core/src/main/java/art/arcane/iris/util/project/sentry/IrisLogger.java index e77d6660c..bf02be062 100644 --- a/core/src/main/java/art/arcane/iris/util/project/sentry/IrisLogger.java +++ b/core/src/main/java/art/arcane/iris/util/project/sentry/IrisLogger.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.sentry; +package art.arcane.iris.util.project.sentry; import art.arcane.iris.Iris; import io.sentry.ILogger; diff --git a/core/src/main/java/art/arcane/iris/util/project/sentry/ServerID.java b/core/src/main/java/art/arcane/iris/util/project/sentry/ServerID.java index 4b090a9ab..0545c144c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/sentry/ServerID.java +++ b/core/src/main/java/art/arcane/iris/util/project/sentry/ServerID.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.sentry; +package art.arcane.iris.util.project.sentry; import art.arcane.volmlib.util.io.IO; import io.sentry.protocol.User; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/BasicStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/BasicStream.java index defdc22c5..bbb47757a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/BasicStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/BasicStream.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream; +package art.arcane.iris.util.project.stream; import art.arcane.volmlib.util.stream.BasicLayer; public abstract class BasicStream extends BasicLayer implements ProceduralStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/ProceduralStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/ProceduralStream.java index b0add8ea3..295813f05 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/ProceduralStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/ProceduralStream.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream; +package art.arcane.iris.util.project.stream; import art.arcane.iris.Iris; import art.arcane.iris.core.loader.IrisData; @@ -27,19 +27,19 @@ import art.arcane.iris.engine.object.IrisStyledRange; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.stream.ProceduralLayer; import art.arcane.volmlib.util.stream.Significance; -import art.arcane.iris.util.context.ChunkContext; +import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; import art.arcane.volmlib.util.function.Function4; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.parallel.BurstExecutor; -import art.arcane.iris.util.parallel.MultiBurst; -import art.arcane.iris.util.stream.arithmetic.*; -import art.arcane.iris.util.stream.convert.*; -import art.arcane.iris.util.stream.interpolation.Interpolated; -import art.arcane.iris.util.stream.sources.FunctionStream; -import art.arcane.iris.util.stream.utility.*; +import art.arcane.iris.util.common.parallel.BurstExecutor; +import art.arcane.iris.util.common.parallel.MultiBurst; +import art.arcane.iris.util.project.stream.arithmetic.*; +import art.arcane.iris.util.project.stream.convert.*; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.stream.sources.FunctionStream; +import art.arcane.iris.util.project.stream.utility.*; import java.util.ArrayList; import java.util.List; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/AddingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/AddingStream.java index ed2b17dca..d54560698 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/AddingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/AddingStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class AddingStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ClampedStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ClampedStream.java index 6a0f3fb2f..2e8f2f5fd 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ClampedStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ClampedStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class ClampedStream extends BasicStream implements ProceduralStream { private final double min; private final double max; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftLeftStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftLeftStream.java index 83a4bd87f..2ea25f89f 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftLeftStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftLeftStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class CoordinateBitShiftLeftStream extends BasicStream implements ProceduralStream { private final int amount; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftRightStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftRightStream.java index d9e07e5c4..b5a68edc0 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftRightStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/CoordinateBitShiftRightStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class CoordinateBitShiftRightStream extends BasicStream implements ProceduralStream { private final int amount; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/DividingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/DividingStream.java index 8fba9c424..3c897710e 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/DividingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/DividingStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class DividingStream extends BasicStream implements ProceduralStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/FittedStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/FittedStream.java index 1a2098f5e..7028a91e4 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/FittedStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/FittedStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class FittedStream extends BasicStream implements ProceduralStream { private final double min; private final double max; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MaxingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MaxingStream.java index 1e0cbbce3..f18e4950b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MaxingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MaxingStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class MaxingStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MinningStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MinningStream.java index 2dffa623e..6d704fc50 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MinningStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MinningStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class MinningStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ModuloStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ModuloStream.java index 4a8c49c4b..98d0c19e6 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ModuloStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ModuloStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class ModuloStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MultiplyingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MultiplyingStream.java index 479319eea..0fa4b56b1 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MultiplyingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/MultiplyingStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class MultiplyingStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/OffsetStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/OffsetStream.java index 6f36401fc..6ddb74011 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/OffsetStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/OffsetStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class OffsetStream extends BasicStream implements ProceduralStream { private final double ox; private final double oy; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RadialStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RadialStream.java index 2ae50514f..4fe304165 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RadialStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RadialStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class RadialStream extends BasicStream implements ProceduralStream { private final double scale; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RoundingDoubleStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RoundingDoubleStream.java index 746100894..993fe75ac 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RoundingDoubleStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/RoundingDoubleStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class RoundingDoubleStream extends BasicStream { private final ProceduralStream stream; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SlopeStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SlopeStream.java index 4d6ecb71a..4e8c362e3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SlopeStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SlopeStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class SlopeStream extends BasicStream { private final int range; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SubtractingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SubtractingStream.java index 6f922c396..c48cb1faf 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SubtractingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/SubtractingStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class SubtractingStream extends BasicStream { private final Function3 add; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ZoomStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ZoomStream.java index 5ceed4cee..4e804a69f 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ZoomStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/arithmetic/ZoomStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.arithmetic; +package art.arcane.iris.util.project.stream.arithmetic; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class ZoomStream extends BasicStream { private final double ox; private final double oy; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream2D.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream2D.java index fffe1fe50..811b38efb 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream2D.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream2D.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class AwareConversionStream2D extends BasicStream { private final ProceduralStream stream; private final Function3 converter; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream3D.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream3D.java index eafc0ef6f..4e14c42c3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream3D.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/AwareConversionStream3D.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; import art.arcane.volmlib.util.function.Function4; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class AwareConversionStream3D extends BasicStream { private final ProceduralStream stream; private final Function4 converter; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/CachedConversionStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/CachedConversionStream.java index 0662b7873..f857bca3c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/CachedConversionStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/CachedConversionStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.stream.BasicLayer; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.function.Function; public class CachedConversionStream extends BasicLayer implements ProceduralStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/ConversionStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/ConversionStream.java index 665ea10fe..0fa13d033 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/ConversionStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/ConversionStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; import art.arcane.volmlib.util.stream.BasicLayer; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.function.Function; public class ConversionStream extends BasicLayer implements ProceduralStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/ForceDoubleStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/ForceDoubleStream.java index 49e428bf7..fb6685c30 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/ForceDoubleStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/ForceDoubleStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class ForceDoubleStream extends BasicStream { private final ProceduralStream stream; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/RoundingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/RoundingStream.java index d630d47b6..abc364eee 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/RoundingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/RoundingStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class RoundingStream extends BasicStream { private final ProceduralStream stream; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/SelectionStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/SelectionStream.java index ae94d5c03..178974850 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/SelectionStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/SelectionStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.List; public class SelectionStream extends BasicStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/SignificanceStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/SignificanceStream.java index 0a17d95f0..2c89af41d 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/SignificanceStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/SignificanceStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.stream.ArraySignificance; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import art.arcane.volmlib.util.stream.Significance; public class SignificanceStream, T> extends BasicStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/convert/To3DStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/convert/To3DStream.java index 8cb882b57..32e94f1e6 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/convert/To3DStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/convert/To3DStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.convert; +package art.arcane.iris.util.project.stream.convert; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class To3DStream extends BasicStream { public To3DStream(ProceduralStream stream) { super(stream); diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiHermiteStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiHermiteStream.java index 0b161274f..54e85a7d7 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiHermiteStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiHermiteStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class BiHermiteStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiStarcastStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiStarcastStream.java index 793d180ec..5c87d21d3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiStarcastStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BiStarcastStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class BiStarcastStream extends BasicStream implements Interpolator { private final int rad; private final int checks; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BicubicStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BicubicStream.java index 47d43a27a..998ae6ad6 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BicubicStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BicubicStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class BicubicStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BilinearStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BilinearStream.java index e7cb5bbb1..00277addf 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BilinearStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/BilinearStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class BilinearStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolated.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolated.java index 4ff915183..19717a72a 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolated.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolated.java @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; import art.arcane.iris.Iris; import art.arcane.iris.engine.object.CaveResult; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import org.bukkit.block.data.BlockData; import java.util.UUID; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatingStream.java index 2f92032a7..5dd0d8a92 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatingStream.java @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class InterpolatingStream extends BasicStream implements Interpolator { private final InterpolationMethod type; private final NoiseProvider np; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolator.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolator.java index 2331de4a6..f8f2c55de 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolator.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/Interpolator.java @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public interface Interpolator { @SuppressWarnings("unchecked") default InterpolatorFactory into() { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatorFactory.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatorFactory.java index 35442a07c..ac177d118 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatorFactory.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/InterpolatorFactory.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.stream.ProceduralStream; @SuppressWarnings("ClassCanBeRecord") public class InterpolatorFactory { private final ProceduralStream stream; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriHermiteStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriHermiteStream.java index c1704c030..ded45d4cd 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriHermiteStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriHermiteStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class TriHermiteStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriStarcastStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriStarcastStream.java index 16e45b699..d1bdf9c5c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriStarcastStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TriStarcastStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class TriStarcastStream extends BasicStream implements Interpolator { private final int rad; private final int checks; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TricubicStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TricubicStream.java index 1f1b71527..b994262f9 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TricubicStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TricubicStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class TricubicStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TrilinearStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TrilinearStream.java index af0aac0c5..18a9f1595 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TrilinearStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/interpolation/TrilinearStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.interpolation; +package art.arcane.iris.util.project.stream.interpolation; -import art.arcane.iris.util.interpolation.IrisInterpolation; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class TrilinearStream extends BasicStream implements Interpolator { private final int rx; private final int ry; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/sources/CNGStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/sources/CNGStream.java index ef3557ef5..0227ce003 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/sources/CNGStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/sources/CNGStream.java @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.sources; +package art.arcane.iris.util.project.stream.sources; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import art.arcane.volmlib.util.stream.BasicLayer; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class CNGStream extends BasicLayer implements ProceduralStream { private final CNG cng; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/sources/FunctionStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/sources/FunctionStream.java index c984478bc..a5916ac7c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/sources/FunctionStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/sources/FunctionStream.java @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.sources; +package art.arcane.iris.util.project.stream.sources; import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.interpolation.Interpolated; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.interpolation.Interpolated; public class FunctionStream extends BasicStream { private final Function2 f2; private final Function3 f3; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream2D.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream2D.java index 6d1dc7f70..08e9ff0c6 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream2D.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream2D.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; import art.arcane.iris.Iris; import art.arcane.iris.core.service.PreservationSVC; @@ -25,8 +25,8 @@ import art.arcane.iris.engine.framework.MeteredCache; import art.arcane.volmlib.util.cache.ChunkCache2D; import art.arcane.volmlib.util.cache.WorldCache2D; import art.arcane.volmlib.util.data.KCache; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class CachedStream2D extends BasicStream implements ProceduralStream, MeteredCache { private final ProceduralStream stream; private final WorldCache2D cache; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream3D.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream3D.java index 1365815ed..cd340a0ae 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream3D.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/CachedStream3D.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; import art.arcane.iris.Iris; import art.arcane.iris.core.service.PreservationSVC; @@ -24,8 +24,8 @@ import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.MeteredCache; import art.arcane.volmlib.util.data.KCache; import art.arcane.volmlib.util.math.BlockPosition; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class CachedStream3D extends BasicStream implements ProceduralStream, MeteredCache { private final ProceduralStream stream; private final KCache cache; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/ContextInjectingStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/ContextInjectingStream.java index 90256c03d..59314633d 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/ContextInjectingStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/ContextInjectingStream.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; -import art.arcane.iris.util.context.ChunkContext; -import art.arcane.iris.util.context.IrisContext; +import art.arcane.iris.util.project.context.ChunkContext; +import art.arcane.iris.util.project.context.IrisContext; import art.arcane.volmlib.util.function.Function3; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class ContextInjectingStream extends BasicStream { private final Function3 contextAccessor; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/NullSafeStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/NullSafeStream.java index 079715f79..97ce20903 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/NullSafeStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/NullSafeStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class NullSafeStream extends BasicStream implements ProceduralStream { private final ProceduralStream stream; private final T ifNull; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/ProfiledStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/ProfiledStream.java index 03be9c8b1..eba3a194c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/ProfiledStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/ProfiledStream.java @@ -16,15 +16,15 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.RollingSequence; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import lombok.Data; import java.util.concurrent.atomic.AtomicInteger; diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/SemaphoreStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/SemaphoreStream.java index d4a87803f..af4f89222 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/SemaphoreStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/SemaphoreStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.concurrent.Semaphore; public class SemaphoreStream extends BasicStream { diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/SynchronizedStream.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/SynchronizedStream.java index 29d44fcdf..2acbf6ee1 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/SynchronizedStream.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/SynchronizedStream.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; public class SynchronizedStream extends BasicStream { public SynchronizedStream(ProceduralStream stream) { super(stream); diff --git a/core/src/main/java/art/arcane/iris/util/project/stream/utility/WasteDetector.java b/core/src/main/java/art/arcane/iris/util/project/stream/utility/WasteDetector.java index 12f80f912..a6b0cec6f 100644 --- a/core/src/main/java/art/arcane/iris/util/project/stream/utility/WasteDetector.java +++ b/core/src/main/java/art/arcane/iris/util/project/stream/utility/WasteDetector.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.stream.utility; +package art.arcane.iris.util.project.stream.utility; import art.arcane.iris.Iris; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.stream.BasicStream; -import art.arcane.iris.util.stream.ProceduralStream; +import art.arcane.iris.util.project.stream.BasicStream; +import art.arcane.iris.util.project.stream.ProceduralStream; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/U.java b/core/src/main/java/art/arcane/iris/util/project/uniques/U.java index 5f064405d..5bce53eb2 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/U.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/U.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import java.io.File; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UBufferedImage.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UBufferedImage.java index 32801632f..0c2346069 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UBufferedImage.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UBufferedImage.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import java.awt.*; import java.awt.image.BufferedImage; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UFeature.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UFeature.java index 027f4303c..da349b881 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UFeature.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UFeature.java @@ -1,9 +1,9 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import art.arcane.volmlib.util.function.NoiseInjector; -import art.arcane.iris.util.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.noise.CNG; import java.awt.*; import java.util.List; import java.util.function.Consumer; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UFeatureMeta.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UFeatureMeta.java index bd3b77d77..64970e01b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UFeatureMeta.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UFeatureMeta.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import art.arcane.iris.engine.object.NoiseStyle; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.noise.CNG; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UImage.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UImage.java index 4c5bc6cdd..7da458d6c 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UImage.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UImage.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import java.awt.*; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UMeta.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UMeta.java index ea07458a7..7053371ef 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UMeta.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UMeta.java @@ -1,4 +1,4 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import com.google.gson.GsonBuilder; import art.arcane.volmlib.util.collection.KMap; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/UniqueRenderer.java b/core/src/main/java/art/arcane/iris/util/project/uniques/UniqueRenderer.java index 96c2f1943..121ee7d9b 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/UniqueRenderer.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/UniqueRenderer.java @@ -1,20 +1,20 @@ -package art.arcane.iris.util.uniques; +package art.arcane.iris.util.project.uniques; import art.arcane.iris.engine.object.NoiseStyle; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.parallel.BurstExecutor; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.common.parallel.BurstExecutor; import art.arcane.volmlib.util.scheduling.ChronoLatch; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; -import art.arcane.iris.util.stream.ProceduralStream; -import art.arcane.iris.util.uniques.features.*; +import art.arcane.iris.util.project.stream.ProceduralStream; +import art.arcane.iris.util.project.uniques.features.*; import java.awt.image.BufferedImage; import java.io.File; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFInterpolator.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFInterpolator.java index d82a87df6..b0db91df5 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFInterpolator.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFInterpolator.java @@ -1,13 +1,13 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.function.NoiseProvider; -import art.arcane.iris.util.interpolation.InterpolationMethod; -import art.arcane.iris.util.interpolation.IrisInterpolation; +import art.arcane.iris.util.project.interpolation.InterpolationMethod; +import art.arcane.iris.util.project.interpolation.IrisInterpolation; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.awt.*; import java.util.function.Consumer; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFNOOP.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFNOOP.java index b33780050..9b341f8a9 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFNOOP.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFNOOP.java @@ -1,9 +1,9 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.util.function.Consumer; public class UFNOOP implements UFeature { diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedBackground.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedBackground.java index da6a61409..e16d45db9 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedBackground.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedBackground.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.util.function.Consumer; public class UFWarpedBackground implements UFeature { diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedCircle.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedCircle.java index d8562327f..e7fc5c1fa 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedCircle.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedCircle.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.util.function.Consumer; public class UFWarpedCircle implements UFeature { diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDisc.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDisc.java index 6dbc3f8f7..702f7ce14 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDisc.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDisc.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.util.function.Consumer; public class UFWarpedDisc implements UFeature { diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDots.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDots.java index 8ddc098e6..4d6fd2a49 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDots.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedDots.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.awt.*; import java.util.function.Consumer; diff --git a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedLines.java b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedLines.java index dfd31a946..4e64e0ec3 100644 --- a/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedLines.java +++ b/core/src/main/java/art/arcane/iris/util/project/uniques/features/UFWarpedLines.java @@ -1,10 +1,10 @@ -package art.arcane.iris.util.uniques.features; +package art.arcane.iris.util.project.uniques.features; import art.arcane.volmlib.util.math.RNG; -import art.arcane.iris.util.noise.CNG; -import art.arcane.iris.util.uniques.UFeature; -import art.arcane.iris.util.uniques.UFeatureMeta; -import art.arcane.iris.util.uniques.UImage; +import art.arcane.iris.util.project.noise.CNG; +import art.arcane.iris.util.project.uniques.UFeature; +import art.arcane.iris.util.project.uniques.UFeatureMeta; +import art.arcane.iris.util.project.uniques.UImage; import java.util.function.Consumer; public class UFWarpedLines implements UFeature { diff --git a/core/src/main/kotlin/art/arcane/iris/core/safeguard/IrisSafeguard.kt b/core/src/main/kotlin/art/arcane/iris/core/safeguard/IrisSafeguard.kt index 33ac7517f..9b71a809b 100644 --- a/core/src/main/kotlin/art/arcane/iris/core/safeguard/IrisSafeguard.kt +++ b/core/src/main/kotlin/art/arcane/iris/core/safeguard/IrisSafeguard.kt @@ -5,8 +5,8 @@ import art.arcane.iris.core.safeguard.task.Diagnostic import art.arcane.iris.core.safeguard.task.Task import art.arcane.iris.core.safeguard.task.ValueWithDiagnostics import art.arcane.iris.core.safeguard.task.tasks -import art.arcane.iris.util.format.C -import art.arcane.iris.util.scheduling.J +import art.arcane.iris.util.common.format.C +import art.arcane.iris.util.common.scheduling.J import java.util.* object IrisSafeguard { diff --git a/core/src/main/kotlin/art/arcane/iris/core/safeguard/Mode.kt b/core/src/main/kotlin/art/arcane/iris/core/safeguard/Mode.kt index ef59807d9..fd6afa6eb 100644 --- a/core/src/main/kotlin/art/arcane/iris/core/safeguard/Mode.kt +++ b/core/src/main/kotlin/art/arcane/iris/core/safeguard/Mode.kt @@ -3,7 +3,7 @@ package art.arcane.iris.core.safeguard import art.arcane.iris.BuildConstants import art.arcane.iris.Iris import art.arcane.iris.core.IrisSettings -import art.arcane.iris.util.format.C +import art.arcane.iris.util.common.format.C import art.arcane.volmlib.util.format.Form import org.bukkit.Bukkit import java.time.LocalDate diff --git a/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/Tasks.kt b/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/Tasks.kt index d0e27ca7a..4f88f0a00 100644 --- a/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/Tasks.kt +++ b/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/Tasks.kt @@ -8,8 +8,8 @@ import art.arcane.iris.core.safeguard.Mode import art.arcane.iris.core.safeguard.Mode.* import art.arcane.iris.core.safeguard.task.Diagnostic.Logger.* import art.arcane.iris.core.safeguard.task.Task.Companion.of -import art.arcane.iris.util.agent.Agent -import art.arcane.iris.util.misc.getHardware +import art.arcane.iris.util.project.agent.Agent +import art.arcane.iris.util.common.misc.getHardware import org.bukkit.Bukkit import java.util.Locale import java.util.stream.Collectors @@ -76,11 +76,12 @@ private val version by task { val parts = Iris.instance.description.version.split('-') val minVersion = parts[1] val maxVersion = parts[2] + val supportedVersions = if (minVersion == maxVersion) minVersion else "$minVersion - $maxVersion" if (INMS.get() !is NMSBinding1X) STABLE.withDiagnostics() else UNSTABLE.withDiagnostics( ERROR.create("Server Version"), - ERROR.create("- Iris only supports $minVersion > $maxVersion") + ERROR.create("- Iris only supports $supportedVersions") ) } diff --git a/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/ValueWithDiagnostics.kt b/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/ValueWithDiagnostics.kt index 4e6e55d83..ea5de3afd 100644 --- a/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/ValueWithDiagnostics.kt +++ b/core/src/main/kotlin/art/arcane/iris/core/safeguard/task/ValueWithDiagnostics.kt @@ -1,7 +1,7 @@ package art.arcane.iris.core.safeguard.task import art.arcane.iris.Iris -import art.arcane.iris.util.format.C +import art.arcane.iris.util.common.format.C import java.io.ByteArrayOutputStream import java.io.PrintStream diff --git a/core/src/main/kotlin/art/arcane/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt b/core/src/main/kotlin/art/arcane/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt index 32d142d05..d2f7c89eb 100644 --- a/core/src/main/kotlin/art/arcane/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt +++ b/core/src/main/kotlin/art/arcane/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt @@ -12,7 +12,7 @@ import art.arcane.iris.core.scripting.kotlin.runner.value import art.arcane.iris.core.scripting.kotlin.runner.valueOrThrow import art.arcane.volmlib.util.collection.KMap import art.arcane.volmlib.util.data.KCache -import art.arcane.iris.util.format.C +import art.arcane.iris.util.common.format.C import java.io.File import kotlin.reflect.KClass import kotlin.script.experimental.annotations.KotlinScript diff --git a/core/src/main/kotlin/art/arcane/iris/engine/mantle/MatterGenerator.kt b/core/src/main/kotlin/art/arcane/iris/engine/mantle/MatterGenerator.kt index eb2c48452..6e116b65c 100644 --- a/core/src/main/kotlin/art/arcane/iris/engine/mantle/MatterGenerator.kt +++ b/core/src/main/kotlin/art/arcane/iris/engine/mantle/MatterGenerator.kt @@ -4,14 +4,14 @@ import art.arcane.iris.Iris import art.arcane.iris.core.IrisSettings import art.arcane.iris.core.nms.container.Pair import art.arcane.iris.engine.framework.Engine -import art.arcane.iris.util.context.ChunkContext -import art.arcane.iris.util.misc.RegenRuntime +import art.arcane.iris.util.project.context.ChunkContext +import art.arcane.iris.util.common.misc.RegenRuntime import art.arcane.volmlib.util.matter.Matter -import art.arcane.iris.util.matter.TileWrapper import art.arcane.volmlib.util.documentation.ChunkCoordinates import art.arcane.volmlib.util.mantle.runtime.Mantle import art.arcane.volmlib.util.mantle.flag.MantleFlag -import art.arcane.iris.util.parallel.MultiBurst +import art.arcane.iris.util.common.parallel.MultiBurst +import art.arcane.iris.util.project.matter.TileWrapper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking diff --git a/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkContext.kt b/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkContext.kt index bf3342ba3..52e069046 100644 --- a/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkContext.kt +++ b/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkContext.kt @@ -1,9 +1,9 @@ -package art.arcane.iris.util.context +package art.arcane.iris.util.project.context import art.arcane.iris.engine.IrisComplex import art.arcane.iris.engine.`object`.IrisBiome import art.arcane.iris.engine.`object`.IrisRegion -import art.arcane.iris.util.parallel.MultiBurst +import art.arcane.iris.util.common.parallel.MultiBurst import kotlinx.coroutines.* import org.bukkit.block.data.BlockData diff --git a/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkedDataCache.kt b/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkedDataCache.kt index d3e4a99fd..e28c63fde 100644 --- a/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkedDataCache.kt +++ b/core/src/main/kotlin/art/arcane/iris/util/project/context/ChunkedDataCache.kt @@ -1,7 +1,7 @@ -package art.arcane.iris.util.context +package art.arcane.iris.util.project.context import art.arcane.volmlib.util.documentation.BlockCoordinates -import art.arcane.iris.util.stream.ProceduralStream +import art.arcane.iris.util.project.stream.ProceduralStream import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6f2bb9e04..ec43eafb0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ grgit = "5.3.2" # https://github.com/ajoberstar/grgit # Core Libraries lombok = "1.18.38" -spigot = "1.20.1-R0.1-SNAPSHOT" # https://hub.spigotmc.org/nexus/repository/snapshots/org/spigotmc/spigot-api/maven-metadata.xml +spigot = "1.21.11-R0.1-SNAPSHOT" # https://hub.spigotmc.org/nexus/repository/snapshots/org/spigotmc/spigot-api/maven-metadata.xml log4j = "2.19.0" # https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-api adventure-api = "4.24.0" # https://github.com/KyoriPowered/adventure adventure-platform = "4.4.1" # https://github.com/KyoriPowered/adventure-platform diff --git a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/CustomBiomeSource.java b/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/CustomBiomeSource.java deleted file mode 100644 index cb0f2b4b7..000000000 --- a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/CustomBiomeSource.java +++ /dev/null @@ -1,169 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R1; - -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftServer; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.block.CraftBlock; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().registry(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).registry(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry - .get(new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(CraftBlock.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .registry(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().registry(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.get(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.getHolder(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected Codec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return CraftBlock.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/IrisChunkGenerator.java b/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/IrisChunkGenerator.java deleted file mode 100644 index 00255512f..000000000 --- a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/IrisChunkGenerator.java +++ /dev/null @@ -1,420 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R1; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_20_R1.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().registry(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = new ResourceLocation(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.getTag(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected Codec codec() { - return Codec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.registryOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var structure = registry.getOptional(loc).orElse(null); - if (structure == null) return false; - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure, registryAccess), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess, GenerationStep.Carving worldgenstage_features) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess, worldgenstage_features); - } - - @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(executor, blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSection()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.POST_FEATURES); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinBuildHeight() + 1; - int maxY = heightAccessor.getMaxBuildHeight() - 1; - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinBuildHeight() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinBuildHeight(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/NMSBinding.java deleted file mode 100644 index 9dd9afb9b..000000000 --- a/nms/v1_20_R1/src/main/java/art/arcane/iris/core/nms/v1_20_R1/NMSBinding.java +++ /dev/null @@ -1,829 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R1; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.datafixers.util.Pair; -import art.arcane.iris.Iris; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_20_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R1.CraftServer; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.block.CraftBlock; -import org.bukkit.craftbukkit.v1_20_R1.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_20_R1.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_20_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_20_R1.util.CraftMagicNumbers; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -public class NMSBinding implements INMSBinding { - - public static final String NMS_VERSION = "1.20.1"; - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - if (tag instanceof CollectionTag collection) { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - return list; - } - if (tag instanceof net.minecraft.nbt.CompoundTag compound) { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - return map; - } - if (tag instanceof NumericTag numeric) - return numeric.getAsNumber(); - return tag.getAsString(); - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - if (object instanceof Map map) { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof List list) { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof Byte number) return ByteTag.valueOf(number); - if (object instanceof Short number) return ShortTag.valueOf(number); - if (object instanceof Integer number) return IntTag.valueOf(number); - if (object instanceof Long number) return LongTag.valueOf(number); - if (object instanceof Float number) return FloatTag.valueOf(number); - if (object instanceof Double number) return DoubleTag.valueOf(number); - if (object instanceof String string) return StringTag.valueOf(string); - return EndTag.INSTANCE; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().registry(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().registry(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().getHolder(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().get(new ResourceLocation(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get(); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key))); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = CraftBlock.biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return CraftBlock.biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.setUnsaved(true); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrCreateTag()); - s.setTag(tag); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = net.minecraft.world.entity.EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(net.minecraft.world.entity.EntityType.class)) { - try { - net.minecraft.world.entity.EntityType entityType = (net.minecraft.world.entity.EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - public void inject(long seed, Engine engine, World world) { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - chunkMap.generator = new IrisChunkGenerator(chunkMap.generator, seed, engine, world); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().registry(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(Pair::getFirst) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().registryOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> new ResourceLocation("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(short.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().registryOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().registryOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().registryOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.registryKeySet() - .stream() - .map(structureSets::getHolder) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new art.arcane.iris.core.nms.container.Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(art.arcane.iris.core.nms.container.Pair::getA, art.arcane.iris.core.nms.container.Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = new ResourceLocation("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/CustomBiomeSource.java b/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/CustomBiomeSource.java deleted file mode 100644 index b071a87e0..000000000 --- a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/CustomBiomeSource.java +++ /dev/null @@ -1,168 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R2; - -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R2.CraftServer; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().registry(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).registry(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry - .get(new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .registry(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().registry(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.get(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.getHolder(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected Codec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/IrisChunkGenerator.java b/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/IrisChunkGenerator.java deleted file mode 100644 index c60bc33d8..000000000 --- a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/IrisChunkGenerator.java +++ /dev/null @@ -1,420 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R2; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R2.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_20_R2.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().registry(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = new ResourceLocation(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.getTag(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected Codec codec() { - return Codec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.registryOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var structure = registry.getOptional(loc).orElse(null); - if (structure == null) return false; - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure, registryAccess), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess, GenerationStep.Carving worldgenstage_features) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess, worldgenstage_features); - } - - @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(executor, blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSection()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.POST_FEATURES); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinBuildHeight() + 1; - int maxY = heightAccessor.getMaxBuildHeight() - 1; - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinBuildHeight() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinBuildHeight(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/NMSBinding.java deleted file mode 100644 index 671ecb01d..000000000 --- a/nms/v1_20_R2/src/main/java/art/arcane/iris/core/nms/v1_20_R2/NMSBinding.java +++ /dev/null @@ -1,848 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R2; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import java.awt.Color; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Function; -import java.util.stream.Collectors; - -import com.mojang.datafixers.util.Pair; -import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMSBinding; -import com.mojang.serialization.Lifecycle; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.container.AutoClosing; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_20_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R2.CraftServer; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R2.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_20_R2.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_20_R2.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.*; -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - if (tag instanceof CollectionTag collection) { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - return list; - } - if (tag instanceof net.minecraft.nbt.CompoundTag compound) { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - return map; - } - if (tag instanceof NumericTag numeric) - return numeric.getAsNumber(); - return tag.getAsString(); - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - if (object instanceof Map map) { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof List list) { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof Byte number) return ByteTag.valueOf(number); - if (object instanceof Short number) return ShortTag.valueOf(number); - if (object instanceof Integer number) return IntTag.valueOf(number); - if (object instanceof Long number) return LongTag.valueOf(number); - if (object instanceof Float number) return FloatTag.valueOf(number); - if (object instanceof Double number) return DoubleTag.valueOf(number); - if (object instanceof String string) return StringTag.valueOf(string); - return EndTag.INSTANCE; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().registry(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().registry(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().getHolder(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().get(new ResourceLocation(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get(); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key))); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.setUnsaved(true); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrCreateTag()); - s.setTag(tag); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - chunkMap.generator = new IrisChunkGenerator(chunkMap.generator, seed, engine, world); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().registry(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(Pair::getFirst) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().registryOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> new ResourceLocation("iris", key)) - .allMatch(type::containsKey); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(short.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().registryOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().registryOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().registryOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.registryKeySet() - .stream() - .map(structureSets::getHolder) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new art.arcane.iris.core.nms.container.Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(art.arcane.iris.core.nms.container.Pair::getA, art.arcane.iris.core.nms.container.Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = new ResourceLocation("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/CustomBiomeSource.java b/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/CustomBiomeSource.java deleted file mode 100644 index 92b7ba2d6..000000000 --- a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/CustomBiomeSource.java +++ /dev/null @@ -1,168 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R3; - -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R3.CraftServer; -import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().registry(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).registry(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry - .get(new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .registry(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().registry(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.get(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.getHolder(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected Codec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/IrisChunkGenerator.java b/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/IrisChunkGenerator.java deleted file mode 100644 index fa959f763..000000000 --- a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/IrisChunkGenerator.java +++ /dev/null @@ -1,420 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R3; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R3.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_20_R3.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().registry(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = new ResourceLocation(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.getTag(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected Codec codec() { - return Codec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.registryOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var structure = registry.getOptional(loc).orElse(null); - if (structure == null) return false; - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess, GenerationStep.Carving worldgenstage_features) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess, worldgenstage_features); - } - - @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(executor, blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSection()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.POST_FEATURES); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinBuildHeight() + 1; - int maxY = heightAccessor.getMaxBuildHeight() - 1; - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinBuildHeight() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinBuildHeight(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/NMSBinding.java deleted file mode 100644 index 285bcf06c..000000000 --- a/nms/v1_20_R3/src/main/java/art/arcane/iris/core/nms/v1_20_R3/NMSBinding.java +++ /dev/null @@ -1,849 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R3; - -import java.awt.Color; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Function; -import java.util.stream.Collectors; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.datafixers.util.Pair; -import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMSBinding; -import com.mojang.serialization.Lifecycle; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.container.AutoClosing; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_20_R3.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R3.CraftServer; -import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R3.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_20_R3.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_20_R3.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_20_R3.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_20_R3.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.*; -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - if (tag instanceof CollectionTag collection) { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - return list; - } - if (tag instanceof net.minecraft.nbt.CompoundTag compound) { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - return map; - } - if (tag instanceof NumericTag numeric) - return numeric.getAsNumber(); - return tag.getAsString(); - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - if (object instanceof Map map) { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof List list) { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - return tag; - } - if (object instanceof Byte number) return ByteTag.valueOf(number); - if (object instanceof Short number) return ShortTag.valueOf(number); - if (object instanceof Integer number) return IntTag.valueOf(number); - if (object instanceof Long number) return LongTag.valueOf(number); - if (object instanceof Float number) return FloatTag.valueOf(number); - if (object instanceof Double number) return DoubleTag.valueOf(number); - if (object instanceof String string) return StringTag.valueOf(string); - return EndTag.INSTANCE; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().registry(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().registry(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().getHolder(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().get(new ResourceLocation(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get(); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key))); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.setUnsaved(true); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrCreateTag()); - s.setTag(tag); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - chunkMap.generator = new IrisChunkGenerator(chunkMap.generator, seed, engine, world); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().registry(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(Pair::getFirst) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().registryOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> new ResourceLocation("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(short.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().registryOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().registryOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().registryOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.registryKeySet() - .stream() - .map(structureSets::getHolder) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new art.arcane.iris.core.nms.container.Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(art.arcane.iris.core.nms.container.Pair::getA, art.arcane.iris.core.nms.container.Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = new ResourceLocation("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/CustomBiomeSource.java b/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/CustomBiomeSource.java deleted file mode 100644 index 3885c0782..000000000 --- a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/CustomBiomeSource.java +++ /dev/null @@ -1,168 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R4; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R4.CraftServer; -import org.bukkit.craftbukkit.v1_20_R4.CraftWorld; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().registry(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).registry(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry - .get(new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .registry(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().registry(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = new ResourceLocation(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT) + ":" + j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.get(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.getHolder(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/IrisChunkGenerator.java b/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/IrisChunkGenerator.java deleted file mode 100644 index cae27ebe6..000000000 --- a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/IrisChunkGenerator.java +++ /dev/null @@ -1,419 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R4; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R4.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_20_R4.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.*; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().registry(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = new ResourceLocation(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.getTag(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.registryOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.getHolder(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess, GenerationStep.Carving worldgenstage_features) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess, worldgenstage_features); - } - - @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(executor, blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSection()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.POST_FEATURES); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinBuildHeight() + 1; - int maxY = heightAccessor.getMaxBuildHeight() - 1; - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinBuildHeight() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinBuildHeight(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/NMSBinding.java deleted file mode 100644 index e0a77c2b0..000000000 --- a/nms/v1_20_R4/src/main/java/art/arcane/iris/core/nms/v1_20_R4/NMSBinding.java +++ /dev/null @@ -1,852 +0,0 @@ -package art.arcane.iris.core.nms.v1_20_R4; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.datafixers.util.Pair; -import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_20_R4.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R4.CraftServer; -import org.bukkit.craftbukkit.v1_20_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R4.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_20_R4.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_20_R4.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_20_R4.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_20_R4.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.getAsNumber(); - default -> tag.getAsString(); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().registry(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().registry(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().getHolder(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().get(new ResourceLocation(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get(); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key))); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.setUnsaved(true); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = IdMapper.class.getDeclaredField("tToId"); - Field df = IdMapper.class.getDeclaredField("idToT"); - Field bf = IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - chunkMap.generator = new IrisChunkGenerator(chunkMap.generator, seed, engine, world); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_20_5; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().registry(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(Pair::getFirst) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().registryOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> new ResourceLocation("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(short.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().registryOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().registryOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().registryOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::getHolder) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new art.arcane.iris.core.nms.container.Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(art.arcane.iris.core.nms.container.Pair::getA, art.arcane.iris.core.nms.container.Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = new ResourceLocation("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/CustomBiomeSource.java b/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/CustomBiomeSource.java deleted file mode 100644 index 6817584c7..000000000 --- a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/CustomBiomeSource.java +++ /dev/null @@ -1,168 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R1; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R1.CraftServer; -import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().registry(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).registry(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry - .get(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .registry(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().registry(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.get(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.getHolder(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/IrisChunkGenerator.java b/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/IrisChunkGenerator.java deleted file mode 100644 index bd3ffdaaf..000000000 --- a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/IrisChunkGenerator.java +++ /dev/null @@ -1,420 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R1; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R1.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R1.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().registry(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.getTag(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.registryOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.getHolder(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess, GenerationStep.Carving worldgenstage_features) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess, worldgenstage_features); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSection()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinBuildHeight() + 1; - int maxY = heightAccessor.getMaxBuildHeight() - 1; - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinBuildHeight() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinBuildHeight(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/NMSBinding.java b/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/NMSBinding.java deleted file mode 100644 index 6b04a2c74..000000000 --- a/nms/v1_21_R1/src/main/java/art/arcane/iris/core/nms/v1_21_R1/NMSBinding.java +++ /dev/null @@ -1,862 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R1; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.datafixers.util.Pair; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R1.CraftServer; -import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R1.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R1.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R1.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R1.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.getAsNumber(); - default -> tag.getAsString(); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().registry(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().registry(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().getHolder(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).get(); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key))); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.setUnsaved(true); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadMailBox()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public java.awt.Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_20_5; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().registry(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(Pair::getFirst) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().registryOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(short.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().registryOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().registryOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().registryOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::getHolder) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new art.arcane.iris.core.nms.container.Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(art.arcane.iris.core.nms.container.Pair::getA, art.arcane.iris.core.nms.container.Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/CustomBiomeSource.java b/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/CustomBiomeSource.java deleted file mode 100644 index 6d9b14fe6..000000000 --- a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/CustomBiomeSource.java +++ /dev/null @@ -1,168 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R2; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R2.CraftServer; -import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().lookup(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).lookup(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.get(customRegistry.getResourceKey(customRegistry - .getValue(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .lookup(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.getValue(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.get(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/IrisChunkGenerator.java b/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/IrisChunkGenerator.java deleted file mode 100644 index 77ee7c4fc..000000000 --- a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/IrisChunkGenerator.java +++ /dev/null @@ -1,420 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R2; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R2.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R2.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().lookup(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.get(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.lookupOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.get(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - (biome) -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSectionY()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinY() + 1; - int maxY = heightAccessor.getMaxY(); - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinY() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinY(), column); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/NMSBinding.java b/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/NMSBinding.java deleted file mode 100644 index f2d76403f..000000000 --- a/nms/v1_21_R2/src/main/java/art/arcane/iris/core/nms/v1_21_R2/NMSBinding.java +++ /dev/null @@ -1,861 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R2; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import art.arcane.iris.core.link.Identifier; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.Pair; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.shorts.ShortList; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R2.CraftServer; -import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R2.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R2.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R2.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R2.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R2.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.getAsNumber(); - default -> tag.getAsString(); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().lookup(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().lookup(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().get(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().getValue(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().get(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).orElse(null); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key)).map(Holder::value).orElse(null)); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().lookup(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.markUnsaved(); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().get(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadExecutor(), worldGenContext.unsavedListener()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public java.awt.Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_21_3; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().lookup(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(HolderSet.Named::key) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().lookupOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(ShortList.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().lookupOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().lookupOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().lookupOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::get) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Pair::getA, Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/CustomBiomeSource.java b/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/CustomBiomeSource.java deleted file mode 100644 index 8ef5fd362..000000000 --- a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/CustomBiomeSource.java +++ /dev/null @@ -1,169 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R3; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R3.CraftServer; -import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().lookup(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).lookup(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.get(customRegistry.getResourceKey(customRegistry - .getValue(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .lookup(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.getValue(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.get(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/IrisChunkGenerator.java b/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/IrisChunkGenerator.java deleted file mode 100644 index 43e7d0839..000000000 --- a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/IrisChunkGenerator.java +++ /dev/null @@ -1,450 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R3; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedRandomList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.*; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BuiltinStructures; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R3.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R3.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; -import org.spigotmc.SpigotWorldConfig; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().lookup(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.get(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager, ResourceKey levelKey) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.lookupOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.get(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - holder, - levelKey, - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - biome -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public ChunkGeneratorStructureState createState(HolderLookup holderlookup, RandomState randomstate, long i, SpigotWorldConfig conf) { - return delegate.createState(holderlookup, randomstate, i, conf); - } - - @Override - public void createReferences(WorldGenLevel generatoraccessseed, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.createReferences(generatoraccessseed, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture createBiomes(RandomState randomstate, Blender blender, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.createBiomes(randomstate, blender, structuremanager, ichunkaccess); - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedRandomList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSectionY()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinY() + 1; - int maxY = heightAccessor.getMaxY(); - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinY() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinY(), column); - } - - @Override - public Optional>> getTypeNameForDataFixer() { - return delegate.getTypeNameForDataFixer(); - } - - @Override - public void validate() { - delegate.validate(); - } - - @Override - @SuppressWarnings("deprecation") - public BiomeGenerationSettings getBiomeGenerationSettings(Holder holder) { - return delegate.getBiomeGenerationSettings(holder); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/NMSBinding.java b/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/NMSBinding.java deleted file mode 100644 index 51c8c7fce..000000000 --- a/nms/v1_21_R3/src/main/java/art/arcane/iris/core/nms/v1_21_R3/NMSBinding.java +++ /dev/null @@ -1,860 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R3; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import art.arcane.iris.Iris; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.Pair; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.shorts.ShortList; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R3.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R3.CraftServer; -import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R3.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R3.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R3.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R3.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R3.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R3.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.getAllKeys()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.getAsNumber(); - default -> tag.getAsString(); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().lookup(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().lookup(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().get(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().getValue(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().get(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).orElse(null); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key)).map(Holder::value).orElse(null)); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().lookup(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.markUnsaved(); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = IdMapper.class.getDeclaredField("tToId"); - Field df = IdMapper.class.getDeclaredField("idToT"); - Field bf = IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().get(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseTag((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadExecutor(), worldGenContext.unsavedListener()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_21_3; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().lookup(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(HolderSet.Named::key) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().lookupOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(ShortList.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().lookupOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().lookupOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().lookupOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::get) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Pair::getA, Pair::getB, (a,b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/CustomBiomeSource.java b/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/CustomBiomeSource.java deleted file mode 100644 index bd0bb9c73..000000000 --- a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/CustomBiomeSource.java +++ /dev/null @@ -1,169 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R4; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R4.CraftServer; -import org.bukkit.craftbukkit.v1_21_R4.CraftWorld; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().lookup(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).lookup(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.get(customRegistry.getResourceKey(customRegistry - .getValue(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .lookup(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.getValue(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.get(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/IrisChunkGenerator.java b/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/IrisChunkGenerator.java deleted file mode 100644 index 872cc032e..000000000 --- a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/IrisChunkGenerator.java +++ /dev/null @@ -1,449 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R4; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.*; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R4.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R4.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; -import org.spigotmc.SpigotWorldConfig; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().lookup(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.get(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager, ResourceKey levelKey) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.lookupOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.get(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - holder, - levelKey, - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - biome -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public ChunkGeneratorStructureState createState(HolderLookup holderlookup, RandomState randomstate, long i, SpigotWorldConfig conf) { - return delegate.createState(holderlookup, randomstate, i, conf); - } - - @Override - public void createReferences(WorldGenLevel generatoraccessseed, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.createReferences(generatoraccessseed, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture createBiomes(RandomState randomstate, Blender blender, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.createBiomes(randomstate, blender, structuremanager, ichunkaccess); - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSectionY()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinY() + 1; - int maxY = heightAccessor.getMaxY(); - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinY() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinY(), column); - } - - @Override - public Optional>> getTypeNameForDataFixer() { - return delegate.getTypeNameForDataFixer(); - } - - @Override - public void validate() { - delegate.validate(); - } - - @Override - @SuppressWarnings("deprecation") - public BiomeGenerationSettings getBiomeGenerationSettings(Holder holder) { - return delegate.getBiomeGenerationSettings(holder); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/NMSBinding.java b/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/NMSBinding.java deleted file mode 100644 index 46c7cb627..000000000 --- a/nms/v1_21_R4/src/main/java/art/arcane/iris/core/nms/v1_21_R4/NMSBinding.java +++ /dev/null @@ -1,860 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R4; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import art.arcane.iris.Iris; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.Pair; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.shorts.ShortList; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R4.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R4.CraftServer; -import org.bukkit.craftbukkit.v1_21_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R4.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R4.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R4.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R4.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R4.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R4.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), false); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(net.minecraft.nbt.Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof net.minecraft.nbt.Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.keySet()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.box(); - default -> tag.asString().orElse(null); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new net.minecraft.nbt.ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().lookup(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().lookup(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().get(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().getValue(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().get(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).orElse(null); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key)).map(Holder::value).orElse(null)); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().lookup(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.markUnsaved(); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId"); - Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT"); - Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - net.minecraft.core.IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().get(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseCompoundFully((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadExecutor(), worldGenContext.unsavedListener()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public java.awt.Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_21_3; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().lookup(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(HolderSet.Named::key) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().lookupOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(ShortList.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().lookupOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().lookupOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().lookupOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::get) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Pair::getA, Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} diff --git a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/CustomBiomeSource.java b/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/CustomBiomeSource.java deleted file mode 100644 index 349002148..000000000 --- a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/CustomBiomeSource.java +++ /dev/null @@ -1,169 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R5; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R5.CraftServer; -import org.bukkit.craftbukkit.v1_21_R5.CraftWorld; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().lookup(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).lookup(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.get(customRegistry.getResourceKey(customRegistry - .getValue(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .lookup(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.getValue(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.get(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/IrisChunkGenerator.java b/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/IrisChunkGenerator.java deleted file mode 100644 index 5bd0d18c9..000000000 --- a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/IrisChunkGenerator.java +++ /dev/null @@ -1,449 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R5; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.*; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R5.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R5.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R5.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; -import org.spigotmc.SpigotWorldConfig; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().lookup(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.get(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager, ResourceKey levelKey) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.lookupOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.get(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - holder, - levelKey, - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - biome -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public ChunkGeneratorStructureState createState(HolderLookup holderlookup, RandomState randomstate, long i, SpigotWorldConfig conf) { - return delegate.createState(holderlookup, randomstate, i, conf); - } - - @Override - public void createReferences(WorldGenLevel generatoraccessseed, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.createReferences(generatoraccessseed, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture createBiomes(RandomState randomstate, Blender blender, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.createBiomes(randomstate, blender, structuremanager, ichunkaccess); - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSectionY()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinY() + 1; - int maxY = heightAccessor.getMaxY(); - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinY() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinY(), column); - } - - @Override - public Optional>> getTypeNameForDataFixer() { - return delegate.getTypeNameForDataFixer(); - } - - @Override - public void validate() { - delegate.validate(); - } - - @Override - @SuppressWarnings("deprecation") - public BiomeGenerationSettings getBiomeGenerationSettings(Holder holder) { - return delegate.getBiomeGenerationSettings(holder); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/NMSBinding.java b/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/NMSBinding.java deleted file mode 100644 index 926c1d2cb..000000000 --- a/nms/v1_21_R5/src/main/java/art/arcane/iris/core/nms/v1_21_R5/NMSBinding.java +++ /dev/null @@ -1,860 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R5; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import art.arcane.iris.Iris; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.Pair; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.shorts.ShortList; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R5.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R5.CraftServer; -import org.bukkit.craftbukkit.v1_21_R5.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R5.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R5.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R5.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R5.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R5.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R5.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ())) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.keySet()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.box(); - default -> tag.asString().orElse(null); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().lookup(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().lookup(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().get(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().getValue(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().get(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).orElse(null); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key)).map(Holder::value).orElse(null)); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().lookup(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.markUnsaved(); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = IdMapper.class.getDeclaredField("tToId"); - Field df = IdMapper.class.getDeclaredField("idToT"); - Field bf = IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().get(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseCompoundFully((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).getUnsafe()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadExecutor(), worldGenContext.unsavedListener()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_21_3; - } - - @Override - public int getSpawnChunkCount(World world) { - var radius = Optional.ofNullable(world.getGameRuleValue(GameRule.SPAWN_CHUNK_RADIUS)) - .orElseGet(() -> world.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - if (radius == null) throw new IllegalStateException("GameRule.SPAWN_CHUNK_RADIUS is null!"); - return (int) Math.pow(2 * radius + 1, 2); - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().lookup(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(HolderSet.Named::key) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().lookupOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, ChunkProgressListener.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(ShortList.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().lookupOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().lookupOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().lookupOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::get) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Pair::getA, Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(12) World.Environment env, - @Advice.Argument(value = 13) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/CustomBiomeSource.java b/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/CustomBiomeSource.java deleted file mode 100644 index f62adf4ef..000000000 --- a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/CustomBiomeSource.java +++ /dev/null @@ -1,169 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R6; - -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisBiome; -import art.arcane.iris.engine.object.IrisBiomeCustom; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.math.RNG; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R6.CraftServer; -import org.bukkit.craftbukkit.v1_21_R6.CraftWorld; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -public class CustomBiomeSource extends BiomeSource { - - private final long seed; - private final Engine engine; - private final Registry biomeCustomRegistry; - private final Registry biomeRegistry; - private final AtomicCache registryAccess = new AtomicCache<>(); - private final RNG rng; - private final KMap> customBiomes; - - public CustomBiomeSource(long seed, Engine engine, World world) { - this.engine = engine; - this.seed = seed; - this.biomeCustomRegistry = registry().lookup(Registries.BIOME).orElse(null); - this.biomeRegistry = ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())).lookup(Registries.BIOME).orElse(null); - this.rng = new RNG(engine.getSeedManager().getBiome()); - this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); - } - - private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { - List> b = new ArrayList<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - b.add(customRegistry.get(customRegistry.getResourceKey(customRegistry - .getValue(ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)))).get()).get()); - } - } else { - b.add(NMSBinding.biomeToBiomeBase(registry, i.getVanillaDerivative())); - } - } - - return b; - } - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected Stream> collectPossibleBiomes() { - return getAllBiomes( - ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) - .lookup(Registries.BIOME).orElse(null), - ((CraftWorld) engine.getWorld().realWorld()).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null), - engine).stream(); - } - private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { - KMap> m = new KMap<>(); - - for (IrisBiome i : engine.getAllBiomes()) { - if (i.isCustom()) { - for (IrisBiomeCustom j : i.getCustomDerivitives()) { - ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(engine.getDimension().getLoadKey().toLowerCase(java.util.Locale.ROOT), j.getId().toLowerCase(java.util.Locale.ROOT)); - Biome biome = customRegistry.getValue(resourceLocation); - Optional> optionalBiomeKey = customRegistry.getResourceKey(biome); - if (optionalBiomeKey.isEmpty()) { - Iris.error("Cannot find biome for IrisBiomeCustom " + j.getId() + " from engine " + engine.getName()); - continue; - } - ResourceKey biomeKey = optionalBiomeKey.get(); - Optional> optionalReferenceHolder = customRegistry.get(biomeKey); - if (optionalReferenceHolder.isEmpty()) { - Iris.error("Cannot find reference to biome " + biomeKey + " for engine " + engine.getName()); - continue; - } - m.put(j.getId(), optionalReferenceHolder.get()); - } - } - } - - return m; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - @Override - protected MapCodec codec() { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); - if (ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); - } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); - return NMSBinding.biomeToBiomeBase(biomeRegistry, v); - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/IrisChunkGenerator.java b/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/IrisChunkGenerator.java deleted file mode 100644 index 9380a3f16..000000000 --- a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/IrisChunkGenerator.java +++ /dev/null @@ -1,449 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R6; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.MapCodec; -import art.arcane.iris.Iris; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.framework.ResultLocator; -import art.arcane.iris.engine.framework.WrongEngineBroException; -import art.arcane.iris.engine.object.IrisJigsawStructure; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.object.IrisStructurePopulator; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.collection.KSet; -import art.arcane.volmlib.util.mantle.flag.MantleFlag; -import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.tags.StructureTags; -import net.minecraft.tags.TagKey; -import net.minecraft.util.random.WeightedList; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.*; -import net.minecraft.world.level.biome.*; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkGeneratorStructureState; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.levelgen.*; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R6.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R6.generator.CustomChunkGenerator; -import org.bukkit.craftbukkit.v1_21_R6.generator.structure.CraftStructure; -import org.bukkit.event.world.AsyncStructureSpawnEvent; -import org.spigotmc.SpigotWorldConfig; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; - -public class IrisChunkGenerator extends CustomChunkGenerator { - private static final WrappedField BIOME_SOURCE; - private static final WrappedReturningMethod SET_HEIGHT; - private final ChunkGenerator delegate; - private final Engine engine; - private final KMap, KSet> structures = new KMap<>(); - private final IrisStructurePopulator populator; - - public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) { - super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null); - this.delegate = delegate; - this.engine = engine; - this.populator = new IrisStructurePopulator(engine); - var dimension = engine.getDimension(); - - KSet placements = new KSet<>(); - addAll(dimension.getJigsawStructures(), placements); - for (var region : dimension.getAllRegions(engine)) { - addAll(region.getJigsawStructures(), placements); - for (var biome : region.getAllBiomes(engine)) - addAll(biome.getJigsawStructures(), placements); - } - var stronghold = dimension.getStronghold(); - if (stronghold != null) - placements.add(engine.getData().getJigsawStructureLoader().load(stronghold)); - placements.removeIf(Objects::isNull); - - var registry = ((CraftWorld) world).getHandle().registryAccess().lookup(Registries.STRUCTURE).orElseThrow(); - for (var s : placements) { - try { - String raw = s.getStructureKey(); - if (raw == null) continue; - boolean tag = raw.startsWith("#"); - if (tag) raw = raw.substring(1); - - var location = ResourceLocation.parse(raw); - if (!tag) { - structures.computeIfAbsent(ResourceKey.create(Registries.STRUCTURE, location), k -> new KSet<>()).add(s.getLoadKey()); - continue; - } - - var key = TagKey.create(Registries.STRUCTURE, location); - var set = registry.get(key).orElse(null); - if (set == null) { - Iris.error("Could not find structure tag: " + raw); - continue; - } - for (var holder : set) { - var resourceKey = holder.unwrapKey().orElse(null); - if (resourceKey == null) continue; - structures.computeIfAbsent(resourceKey, k -> new KSet<>()).add(s.getLoadKey()); - } - } catch (Throwable e) { - Iris.error("Failed to load structure: " + s.getLoadKey()); - e.printStackTrace(); - } - } - } - - private void addAll(KList placements, KSet structures) { - if (placements == null) return; - placements.stream() - .map(IrisJigsawStructurePlacement::getStructure) - .map(engine.getData().getJigsawStructureLoader()::load) - .filter(Objects::nonNull) - .forEach(structures::add); - } - - @Override - public @Nullable Pair> findNearestMapStructure(ServerLevel level, HolderSet holders, BlockPos pos, int radius, boolean findUnexplored) { - if (holders.size() == 0) return null; - if (holders.unwrapKey().orElse(null) == StructureTags.EYE_OF_ENDER_LOCATED) { - var next = engine.getNearestStronghold(new Position2(pos.getX(), pos.getZ())); - return next == null ? null : new Pair<>(new BlockPos(next.getX(), 0, next.getZ()), holders.get(0)); - } - if (engine.getDimension().isDisableExplorerMaps()) - return null; - - KMap> structures = new KMap<>(); - for (var holder : holders) { - if (holder == null) continue; - var key = holder.unwrapKey().orElse(null); - var set = this.structures.get(key); - if (set == null) continue; - for (var structure : set) { - structures.put(structure, holder); - } - } - if (structures.isEmpty()) - return null; - - var locator = ResultLocator.locateStructure(structures.keySet()) - .then((e, p , s) -> structures.get(s.getLoadKey())); - if (findUnexplored) - locator = locator.then((e, p, s) -> e.getMantle().getMantle().getChunk(p.getX(), p.getZ()).isFlagged(MantleFlag.DISCOVERED) ? null : s); - - try { - var result = locator.find(engine, new Position2(pos.getX() >> 4, pos.getZ() >> 4), radius * 10L, i -> {}, false).get(); - if (result == null) return null; - var blockPos = new BlockPos(result.getBlockX(), 0, result.getBlockZ()); - return Pair.of(blockPos, result.obj()); - } catch (WrongEngineBroException | ExecutionException | InterruptedException e) { - return null; - } - } - - @Override - protected MapCodec codec() { - return MapCodec.unit(null); - } - - @Override - public ChunkGenerator getDelegate() { - if (delegate instanceof CustomChunkGenerator chunkGenerator) - return chunkGenerator.getDelegate(); - return delegate; - } - - @Override - public int getMinY() { - return delegate.getMinY(); - } - - @Override - public int getSeaLevel() { - return delegate.getSeaLevel(); - } - - @Override - public void createStructures(RegistryAccess registryAccess, ChunkGeneratorStructureState structureState, StructureManager structureManager, ChunkAccess access, StructureTemplateManager templateManager, ResourceKey levelKey) { - if (!structureManager.shouldGenerateStructures()) - return; - var chunkPos = access.getPos(); - var sectionPos = SectionPos.bottomOf(access); - var registry = registryAccess.lookupOrThrow(Registries.STRUCTURE); - populator.populateStructures(chunkPos.x, chunkPos.z, (key, ignoreBiomes) -> { - var loc = ResourceLocation.tryParse(key); - if (loc == null) return false; - var holder = registry.get(loc).orElse(null); - if (holder == null) return false; - var structure = holder.value(); - var biomes = structure.biomes(); - - var start = structure.generate( - holder, - levelKey, - registryAccess, - this, - biomeSource, - structureState.randomState(), - templateManager, - structureState.getLevelSeed(), - chunkPos, - fetchReferences(structureManager, access, sectionPos, structure), - access, - biome -> ignoreBiomes || biomes.contains(biome) - ); - - if (!start.isValid()) - return false; - - BoundingBox box = start.getBoundingBox(); - AsyncStructureSpawnEvent event = new AsyncStructureSpawnEvent( - structureManager.level.getMinecraftWorld().getWorld(), - CraftStructure.minecraftToBukkit(structure), - new org.bukkit.util.BoundingBox( - box.minX(), - box.minY(), - box.minZ(), - box.maxX(), - box.maxY(), - box.maxZ() - ), chunkPos.x, chunkPos.z); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - structureManager.setStartForStructure(sectionPos, structure, start, access); - } - return true; - }); - } - - private static int fetchReferences(StructureManager structureManager, ChunkAccess access, SectionPos sectionPos, Structure structure) { - StructureStart structurestart = structureManager.getStartForStructure(sectionPos, structure, access); - return structurestart != null ? structurestart.getReferences() : 0; - } - - @Override - public ChunkGeneratorStructureState createState(HolderLookup holderlookup, RandomState randomstate, long i, SpigotWorldConfig conf) { - return delegate.createState(holderlookup, randomstate, i, conf); - } - - @Override - public void createReferences(WorldGenLevel generatoraccessseed, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.createReferences(generatoraccessseed, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture createBiomes(RandomState randomstate, Blender blender, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.createBiomes(randomstate, blender, structuremanager, ichunkaccess); - } - - @Override - public void buildSurface(WorldGenRegion regionlimitedworldaccess, StructureManager structuremanager, RandomState randomstate, ChunkAccess ichunkaccess) { - delegate.buildSurface(regionlimitedworldaccess, structuremanager, randomstate, ichunkaccess); - } - - @Override - public void applyCarvers(WorldGenRegion regionlimitedworldaccess, long seed, RandomState randomstate, BiomeManager biomemanager, StructureManager structuremanager, ChunkAccess ichunkaccess) { - delegate.applyCarvers(regionlimitedworldaccess, seed, randomstate, biomemanager, structuremanager, ichunkaccess); - } - - @Override - public CompletableFuture fillFromNoise(Blender blender, RandomState randomstate, StructureManager structuremanager, ChunkAccess ichunkaccess) { - return delegate.fillFromNoise(blender, randomstate, structuremanager, ichunkaccess); - } - - @Override - public WeightedList getMobsAt(Holder holder, StructureManager structuremanager, MobCategory enumcreaturetype, BlockPos blockposition) { - return delegate.getMobsAt(holder, structuremanager, enumcreaturetype, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager) { - applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); - } - - @Override - public void addDebugScreenInfo(List list, RandomState randomstate, BlockPos blockposition) { - delegate.addDebugScreenInfo(list, randomstate, blockposition); - } - - @Override - public void applyBiomeDecoration(WorldGenLevel generatoraccessseed, ChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { - addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); - delegate.applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, false); - } - - @Override - public void addVanillaDecorations(WorldGenLevel level, ChunkAccess chunkAccess, StructureManager structureManager) { - if (!structureManager.shouldGenerateStructures()) - return; - - SectionPos sectionPos = SectionPos.of(chunkAccess.getPos(), level.getMinSectionY()); - BlockPos blockPos = sectionPos.origin(); - WorldgenRandom random = new WorldgenRandom(new XoroshiroRandomSource(RandomSupport.generateUniqueSeed())); - long i = random.setDecorationSeed(level.getSeed(), blockPos.getX(), blockPos.getZ()); - var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE); - var list = structures.stream() - .sorted(Comparator.comparingInt(s -> s.step().ordinal())) - .toList(); - - var surface = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - var ocean = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - var motion = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING); - var motionNoLeaves = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - int wX = x + blockPos.getX(); - int wZ = z + blockPos.getZ(); - - int noAir = engine.getHeight(wX, wZ, false) + engine.getMinHeight() + 1; - int noFluid = engine.getHeight(wX, wZ, true) + engine.getMinHeight() + 1; - SET_HEIGHT.invoke(ocean, x, z, Math.min(noFluid, ocean.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(surface, x, z, Math.min(noAir, surface.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motion, x, z, Math.min(noAir, motion.getFirstAvailable(x, z))); - SET_HEIGHT.invoke(motionNoLeaves, x, z, Math.min(noAir, motionNoLeaves.getFirstAvailable(x, z))); - } - } - - for (int j = 0; j < list.size(); j++) { - Structure structure = list.get(j); - random.setFeatureSeed(i, j, structure.step().ordinal()); - Supplier supplier = () -> structures.getResourceKey(structure).map(Object::toString).orElseGet(structure::toString); - - try { - level.setCurrentlyGenerating(supplier); - structureManager.startsForStructure(sectionPos, structure).forEach((start) -> start.placeInChunk(level, structureManager, this, random, getWritableArea(chunkAccess), chunkAccess.getPos())); - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Feature placement"); - CrashReportCategory category = crashReport.addCategory("Feature"); - category.setDetail("Description", supplier::get); - throw new ReportedException(crashReport); - } - } - - Heightmap.primeHeightmaps(chunkAccess, ChunkStatus.FINAL_HEIGHTMAPS); - } - - private static BoundingBox getWritableArea(ChunkAccess ichunkaccess) { - ChunkPos chunkPos = ichunkaccess.getPos(); - int minX = chunkPos.getMinBlockX(); - int minZ = chunkPos.getMinBlockZ(); - LevelHeightAccessor heightAccessor = ichunkaccess.getHeightAccessorForGeneration(); - int minY = heightAccessor.getMinY() + 1; - int maxY = heightAccessor.getMaxY(); - return new BoundingBox(minX, minY, minZ, minX + 15, maxY, minZ + 15); - } - - @Override - public void spawnOriginalMobs(WorldGenRegion regionlimitedworldaccess) { - delegate.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getSpawnHeight(LevelHeightAccessor levelheightaccessor) { - return delegate.getSpawnHeight(levelheightaccessor); - } - - @Override - public int getGenDepth() { - return delegate.getGenDepth(); - } - - @Override - public int getBaseHeight(int i, int j, Heightmap.Types heightmap_type, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - return levelheightaccessor.getMinY() + engine.getHeight(i, j, !heightmap_type.isOpaque().test(Blocks.WATER.defaultBlockState())) + 1; - } - - @Override - public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) { - int block = engine.getHeight(i, j, true); - int water = engine.getHeight(i, j, false); - BlockState[] column = new BlockState[levelheightaccessor.getHeight()]; - for (int k = 0; k < column.length; k++) { - if (k <= block) column[k] = Blocks.STONE.defaultBlockState(); - else if (k <= water) column[k] = Blocks.WATER.defaultBlockState(); - else column[k] = Blocks.AIR.defaultBlockState(); - } - return new NoiseColumn(levelheightaccessor.getMinY(), column); - } - - @Override - public Optional>> getTypeNameForDataFixer() { - return delegate.getTypeNameForDataFixer(); - } - - @Override - public void validate() { - delegate.validate(); - } - - @Override - @SuppressWarnings("deprecation") - public BiomeGenerationSettings getBiomeGenerationSettings(Holder holder) { - return delegate.getBiomeGenerationSettings(holder); - } - - static { - Field biomeSource = null; - for (Field field : ChunkGenerator.class.getDeclaredFields()) { - if (!field.getType().equals(BiomeSource.class)) - continue; - biomeSource = field; - break; - } - if (biomeSource == null) - throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!"); - - Method setHeight = null; - for (Method method : Heightmap.class.getDeclaredMethods()) { - var types = method.getParameterTypes(); - if (types.length != 3 || !Arrays.equals(types, new Class[]{int.class, int.class, int.class}) - || !method.getReturnType().equals(void.class)) - continue; - setHeight = method; - break; - } - if (setHeight == null) - throw new RuntimeException("Could not find setHeight method in Heightmap!"); - - BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName()); - SET_HEIGHT = new WrappedReturningMethod<>(Heightmap.class, setHeight.getName(), setHeight.getParameterTypes()); - } - - private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) { - try { - BIOME_SOURCE.set(generator, source); - if (generator instanceof CustomChunkGenerator custom) - BIOME_SOURCE.set(custom.getDelegate(), source); - - return generator; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/NMSBinding.java b/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/NMSBinding.java deleted file mode 100644 index e60da60d8..000000000 --- a/nms/v1_21_R6/src/main/java/art/arcane/iris/core/nms/v1_21_R6/NMSBinding.java +++ /dev/null @@ -1,856 +0,0 @@ -package art.arcane.iris.core.nms.v1_21_R6; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import art.arcane.iris.Iris; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMSBinding; -import art.arcane.iris.core.nms.container.BiomeColor; -import art.arcane.iris.core.nms.container.Pair; -import art.arcane.iris.core.nms.container.StructurePlacement; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.nms.datapack.DataVersion; -import art.arcane.iris.engine.data.cache.AtomicCache; -import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; -import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; -import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; -import art.arcane.volmlib.util.json.JSONObject; -import art.arcane.volmlib.util.mantle.runtime.Mantle; -import art.arcane.volmlib.util.matter.Matter; -import art.arcane.volmlib.util.math.Vector3d; -import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; -import art.arcane.volmlib.util.nbt.mca.palette.*; -import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.shorts.ShortList; -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.matcher.ElementMatchers; -import net.minecraft.core.*; -import net.minecraft.core.Registry; -import net.minecraft.core.component.DataComponents; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.*; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.commands.data.BlockDataAccessor; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.tags.TagKey; -import net.minecraft.world.RandomSequences; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.component.CustomData; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.bukkit.*; -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_21_R6.CraftChunk; -import org.bukkit.craftbukkit.v1_21_R6.CraftServer; -import org.bukkit.craftbukkit.v1_21_R6.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R6.block.CraftBlockState; -import org.bukkit.craftbukkit.v1_21_R6.block.CraftBlockStates; -import org.bukkit.craftbukkit.v1_21_R6.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R6.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_21_R6.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R6.util.CraftNamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.generator.BiomeProvider; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -public class NMSBinding implements INMSBinding { - private final KMap baseBiomeCache = new KMap<>(); - private final BlockData AIR = Material.AIR.createBlockData(); - private final AtomicCache> biomeMapCache = new AtomicCache<>(); - private final AtomicBoolean injected = new AtomicBoolean(); - private final AtomicCache> registryCache = new AtomicCache<>(); - private final AtomicCache> globalCache = new AtomicCache<>(); - private final AtomicCache registryAccess = new AtomicCache<>(); - private final AtomicCache byIdRef = new AtomicCache<>(); - private Field biomeStorageCache = null; - - private static Object getFor(Class type, Object source) { - Object o = fieldFor(type, source); - - if (o != null) { - return o; - } - - return invokeFor(type, source); - } - - private static Object invokeFor(Class returns, Object in) { - for (Method i : in.getClass().getMethods()) { - if (i.getReturnType().equals(returns)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); - return i.invoke(in); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - return null; - } - - private static Object fieldFor(Class returns, Object in) { - return fieldForClass(returns, in.getClass(), in); - } - - @SuppressWarnings("unchecked") - private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for (Field i : sourceType.getDeclaredFields()) { - if (i.getType().equals(returnType)) { - i.setAccessible(true); - try { - Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T) i.get(in); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClassType(Class type, int ordinal) { - return type.getDeclaredClasses()[ordinal]; - } - - @Override - public boolean hasTile(Material material) { - return !CraftBlockState.class.equals(CraftBlockStates.getBlockStateType(material)); - } - - @Override - public boolean hasTile(Location l) { - return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ())) != null; - } - - @Override - @SuppressWarnings("unchecked") - public KMap serializeTile(Location location) { - BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - - if (e == null) { - return null; - } - - net.minecraft.nbt.CompoundTag tag = e.saveWithoutMetadata(registry()); - return (KMap) convertFromTag(tag, 0, 64); - } - - @Contract(value = "null, _, _ -> null", pure = true) - private Object convertFromTag(Tag tag, int depth, int maxDepth) { - if (tag == null || depth > maxDepth) return null; - return switch (tag) { - case CollectionTag collection -> { - KList list = new KList<>(); - - for (Object i : collection) { - if (i instanceof Tag t) - list.add(convertFromTag(t, depth + 1, maxDepth)); - else list.add(i); - } - yield list; - } - case net.minecraft.nbt.CompoundTag compound -> { - KMap map = new KMap<>(); - - for (String key : compound.keySet()) { - var child = compound.get(key); - if (child == null) continue; - var value = convertFromTag(child, depth + 1, maxDepth); - if (value == null) continue; - map.put(key, value); - } - yield map; - } - case NumericTag numeric -> numeric.box(); - default -> tag.asString().orElse(null); - }; - } - - @Override - public void deserializeTile(KMap map, Location pos) { - net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) convertToTag(map, 0, 64); - var level = ((CraftWorld) pos.getWorld()).getHandle(); - var blockPos = new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - J.s(() -> merge(level, blockPos, tag)); - } - - private void merge(ServerLevel level, BlockPos blockPos, net.minecraft.nbt.CompoundTag tag) { - var blockEntity = level.getBlockEntity(blockPos); - if (blockEntity == null) { - Iris.warn("[NMS] BlockEntity not found at " + blockPos); - var state = level.getBlockState(blockPos); - if (!state.hasBlockEntity()) - return; - - blockEntity = ((EntityBlock) state.getBlock()) - .newBlockEntity(blockPos, state); - } - var accessor = new BlockDataAccessor(blockEntity, blockPos); - accessor.setData(accessor.getData().merge(tag)); - } - - private Tag convertToTag(Object object, int depth, int maxDepth) { - if (object == null || depth > maxDepth) return EndTag.INSTANCE; - return switch (object) { - case Map map -> { - var tag = new net.minecraft.nbt.CompoundTag(); - for (var i : map.entrySet()) { - tag.put(i.getKey().toString(), convertToTag(i.getValue(), depth + 1, maxDepth)); - } - yield tag; - } - case List list -> { - var tag = new ListTag(); - for (var i : list) { - tag.add(convertToTag(i, depth + 1, maxDepth)); - } - yield tag; - } - case Byte number -> ByteTag.valueOf(number); - case Short number -> ShortTag.valueOf(number); - case Integer number -> IntTag.valueOf(number); - case Long number -> LongTag.valueOf(number); - case Float number -> FloatTag.valueOf(number); - case Double number -> DoubleTag.valueOf(number); - case String string -> StringTag.valueOf(string); - default -> EndTag.INSTANCE; - }; - } - - @Override - public CompoundTag serializeEntity(Entity location) { - return null;// TODO: - } - - @Override - public Entity deserializeEntity(CompoundTag s, Location newPosition) { - return null;// TODO: - } - - @Override - public boolean supportsCustomHeight() { - return true; - } - - private RegistryAccess registry() { - return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); - } - - private Registry getCustomBiomeRegistry() { - return registry().lookup(Registries.BIOME).orElse(null); - } - - private Registry getBlockRegistry() { - return registry().lookup(Registries.BLOCK).orElse(null); - } - - @Override - public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().get(id); - } - - @Override - public int getMinHeight(World world) { - return world.getMinHeight(); - } - - @Override - public boolean supportsCustomBiomes() { - return true; - } - - @Override - public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); - } - - @Override - public Object getTrueBiomeBase(Location location) { - return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - } - - @Override - public String getTrueBiomeBaseKey(Location location) { - return getKeyForBiomeBase(getTrueBiomeBase(location)); - } - - @Override - public Object getCustomBiomeBaseFor(String mckey) { - return getCustomBiomeRegistry().getValue(ResourceLocation.parse(mckey)); - } - - @Override - public Object getCustomBiomeBaseHolderFor(String mckey) { - return getCustomBiomeRegistry().get(getTrueBiomeBaseId(getCustomBiomeRegistry().get(ResourceLocation.parse(mckey)))).orElse(null); - } - - public int getBiomeBaseIdForKey(String key) { - return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(ResourceLocation.parse(key)).map(Holder::value).orElse(null)); - } - - @Override - public String getKeyForBiomeBase(Object biomeBase) { - return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something - } - - @Override - public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().lookup(Registries.BIOME).orElse(null), biome); - } - - @Override - public Object getBiomeBase(Object registry, Biome biome) { - Object v = baseBiomeCache.get(biome); - - if (v != null) { - return v; - } - //noinspection unchecked - v = biomeToBiomeBase((Registry) registry, biome); - if (v == null) { - // Ok so there is this new biome name called "CUSTOM" in Paper's new releases. - // But, this does NOT exist within CraftBukkit which makes it return an error. - // So, we will just return the ID that the plains biome returns instead. - //noinspection unchecked - return biomeToBiomeBase((Registry) registry, Biome.PLAINS); - } - baseBiomeCache.put(biome, v); - return v; - } - - @Override - public KList getBiomes() { - return new KList<>(Biome.values()).qadd(Biome.CHERRY_GROVE).qdel(Biome.CUSTOM); - } - - @Override - public boolean isBukkit() { - return true; - } - - @Override - public int getBiomeId(Biome biome) { - for (World i : Bukkit.getWorlds()) { - if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().lookup(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); - } - } - - return biome.ordinal(); - } - - private MCAIdMap getBiomeMapping() { - return biomeMapCache.aquire(() -> new MCAIdMap<>() { - @NotNull - @Override - public Iterator iterator() { - return getCustomBiomeRegistry().iterator(); - } - - @Override - public int getId(net.minecraft.world.level.biome.Biome paramT) { - return getCustomBiomeRegistry().getId(paramT); - } - - @Override - public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); - } - }); - } - - @NotNull - private MCABiomeContainer getBiomeContainerInterface(MCAIdMap biomeMapping, MCAChunkBiomeContainer base) { - return new MCABiomeContainer() { - @Override - public int[] getData() { - return base.writeBiomes(); - } - - @Override - public void setBiome(int x, int y, int z, int id) { - base.setBiome(x, y, z, biomeMapping.byId(id)); - } - - @Override - public int getBiome(int x, int y, int z) { - return biomeMapping.getId(base.getBiome(x, y, z)); - } - }; - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) { - MCAChunkBiomeContainer base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data); - return getBiomeContainerInterface(getBiomeMapping(), base); - } - - @Override - public int countCustomBiomes() { - AtomicInteger a = new AtomicInteger(0); - - getCustomBiomeRegistry().keySet().forEach((i) -> { - if (i.getNamespace().equals("minecraft")) { - return; - } - - a.incrementAndGet(); - Iris.debug("Custom Biome: " + i); - }); - - return a.get(); - } - - public boolean supportsDataPacks() { - return true; - } - - public void setBiomes(int cx, int cz, World world, Hunk biomes) { - LevelChunk c = ((CraftWorld) world).getHandle().getChunk(cx, cz); - biomes.iterateSync((x, y, z, b) -> c.setBiome(x, y, z, (Holder) b)); - c.markUnsaved(); - } - - @Override - public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { - try { - ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - Holder biome = (Holder) somethingVeryDirty; - s.setBiome(x, y, z, biome); - } catch (IllegalAccessException e) { - Iris.reportError(e); - e.printStackTrace(); - } - } - - private Field getFieldForBiomeStorage(Object storage) { - Field f = biomeStorageCache; - - if (f != null) { - return f; - } - try { - f = storage.getClass().getDeclaredField("biome"); - f.setAccessible(true); - return f; - } catch (Throwable e) { - Iris.reportError(e); - e.printStackTrace(); - Iris.error(storage.getClass().getCanonicalName()); - } - - biomeStorageCache = f; - return null; - } - - @Override - public MCAPaletteAccess createPalette() { - MCAIdMapper registry = registryCache.aquireNasty(() -> { - Field cf = IdMapper.class.getDeclaredField("tToId"); - Field df = IdMapper.class.getDeclaredField("idToT"); - Field bf = IdMapper.class.getDeclaredField("nextId"); - cf.setAccessible(true); - df.setAccessible(true); - bf.setAccessible(true); - IdMapper blockData = Block.BLOCK_STATE_REGISTRY; - int b = bf.getInt(blockData); - Object2IntMap c = (Object2IntMap) cf.get(blockData); - List d = (List) df.get(blockData); - return new MCAIdMapper(c, d, b); - }); - MCAPalette global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); - MCAPalettedContainer container = new MCAPalettedContainer<>(global, registry, - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - ((CraftBlockData) AIR).getState()); - return new MCAWrappedPalettedContainer<>(container, - i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); - } - - @Override - public void injectBiomesFromMantle(Chunk e, Mantle mantle) { - ChunkAccess chunk = ((CraftChunk) e).getHandle(ChunkStatus.FULL); - AtomicInteger c = new AtomicInteger(); - AtomicInteger r = new AtomicInteger(); - mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x, y, z, b) -> { - if (b != null) { - if (b.isCustom()) { - chunk.setBiome(x, y, z, getCustomBiomeRegistry().get(b.getBiomeId()).get()); - c.getAndIncrement(); - } else { - chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); - r.getAndIncrement(); - } - } - }); - } - - public ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) throws IllegalArgumentException { - if (customNbt != null && !customNbt.isEmpty()) { - net.minecraft.world.item.ItemStack s = CraftItemStack.asNMSCopy(itemStack); - - try { - net.minecraft.nbt.CompoundTag tag = TagParser.parseCompoundFully((new JSONObject(customNbt)).toString()); - tag.merge(s.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag()); - s.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - } catch (CommandSyntaxException var5) { - throw new IllegalArgumentException(var5); - } - - return CraftItemStack.asBukkitCopy(s); - } else { - return itemStack; - } - } - - public void inject(long seed, Engine engine, World world) throws NoSuchFieldException, IllegalAccessException { - var chunkMap = ((CraftWorld)world).getHandle().getChunkSource().chunkMap; - var worldGenContextField = getField(chunkMap.getClass(), WorldGenContext.class); - worldGenContextField.setAccessible(true); - var worldGenContext = (WorldGenContext) worldGenContextField.get(chunkMap); - var dimensionType = chunkMap.level.dimensionTypeRegistration().unwrapKey().orElse(null); - if (dimensionType != null && !dimensionType.location().getNamespace().equals("iris")) - Iris.error("Loaded world %s with invalid dimension type! (%s)", world.getName(), dimensionType.location().toString()); - - var newContext = new WorldGenContext( - worldGenContext.level(), new IrisChunkGenerator(worldGenContext.generator(), seed, engine, world), - worldGenContext.structureManager(), worldGenContext.lightEngine(), worldGenContext.mainThreadExecutor(), worldGenContext.unsavedListener()); - - worldGenContextField.set(chunkMap, newContext); - } - - public Vector3d getBoundingbox(org.bukkit.entity.EntityType entity) { - Field[] fields = EntityType.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(EntityType.class)) { - try { - EntityType entityType = (EntityType) field.get(null); - if (entityType.getDescriptionId().equals("entity.minecraft." + entity.name().toLowerCase())) { - Vector v1 = new Vector<>(); - v1.add(entityType.getHeight()); - entityType.getDimensions(); - Vector3d box = new Vector3d( entityType.getWidth(), entityType.getHeight(), entityType.getWidth()); - //System.out.println("Entity Type: " + entityType.getDescriptionId() + ", " + "Height: " + height + ", Width: " + width); - return box; - } - } catch (IllegalAccessException e) { - Iris.error("Unable to get entity dimensions!"); - e.printStackTrace(); - } - } - } - return null; - } - - - @Override - public Entity spawnEntity(Location location, org.bukkit.entity.EntityType type, CreatureSpawnEvent.SpawnReason reason) { - return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); - } - - @Override - public Color getBiomeColor(Location location, BiomeColor type) { - LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); - var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); - var biome = holder.value(); - if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); - - int rgba = switch (type) { - case FOG -> biome.getFogColor(); - case WATER -> biome.getWaterColor(); - case WATER_FOG -> biome.getWaterFogColor(); - case SKY -> biome.getSkyColor(); - case FOLIAGE -> biome.getFoliageColor(); - case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); - }; - if (rgba == 0) { - if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) - return null; - if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) - return null; - } - return new Color(rgba, true); - } - - private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { - try { - for (Field f : clazz.getDeclaredFields()) { - if (f.getType().equals(fieldType)) - return f; - } - throw new NoSuchFieldException(fieldType.getName()); - } catch (NoSuchFieldException var4) { - Class superClass = clazz.getSuperclass(); - if (superClass == null) { - throw var4; - } else { - return getField(superClass, fieldType); - } - } - } - - public static Holder biomeToBiomeBase(Registry registry, Biome biome) { - return registry.getOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey()))); - } - - @Override - public DataVersion getDataVersion() { - return DataVersion.V1_21_3; - } - - @Override - public int getSpawnChunkCount(World world) { - return 0; - } - - @Override - public KList getStructureKeys() { - KList keys = new KList<>(); - - var registry = registry().lookup(Registries.STRUCTURE).orElse(null); - if (registry == null) return keys; - registry.keySet().stream().map(ResourceLocation::toString).forEach(keys::add); - registry.getTags() - .map(HolderSet.Named::key) - .map(TagKey::location) - .map(ResourceLocation::toString) - .map(s -> "#" + s) - .forEach(keys::add); - - return keys; - } - - @Override - public boolean missingDimensionTypes(String... keys) { - var type = registry().lookupOrThrow(Registries.DIMENSION_TYPE); - return !Arrays.stream(keys) - .map(key -> ResourceLocation.fromNamespaceAndPath("iris", key)) - .allMatch(type::containsKey); - } - - @Override - public boolean injectBukkit() { - if (injected.getAndSet(true)) - return true; - try { - Iris.info("Injecting Bukkit"); - var buddy = new ByteBuddy(); - buddy.redefine(ServerLevel.class) - .visit(Advice.to(ServerLevelAdvice.class).on(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments( - MinecraftServer.class, Executor.class, LevelStorageSource.LevelStorageAccess.class, PrimaryLevelData.class, - ResourceKey.class, LevelStem.class, boolean.class, long.class, List.class, - boolean.class, RandomSequences.class, World.Environment.class, ChunkGenerator.class, BiomeProvider.class)))) - .make() - .load(ServerLevel.class.getClassLoader(), Agent.installed()); - for (Class clazz : List.of(ChunkAccess.class, ProtoChunk.class)) { - buddy.redefine(clazz) - .visit(Advice.to(ChunkAccessAdvice.class).on(ElementMatchers.isMethod().and(ElementMatchers.takesArguments(ShortList.class, int.class)))) - .make() - .load(clazz.getClassLoader(), Agent.installed()); - } - - return true; - } catch (Throwable e) { - Iris.error(C.RED + "Failed to inject Bukkit"); - e.printStackTrace(); - } - return false; - } - - @Override - public KMap> getBlockProperties() { - KMap> states = new KMap<>(); - - for (var block : registry().lookupOrThrow(Registries.BLOCK)) { - var state = block.defaultBlockState(); - if (state == null) state = block.getStateDefinition().any(); - final var finalState = state; - - states.put(CraftMagicNumbers.getMaterial(block), block.getStateDefinition() - .getProperties() - .stream() - .map(p -> createProperty(p, finalState)) - .toList()); - } - return states; - } - - private > BlockProperty createProperty(Property property, BlockState state) { - return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); - } - - @Override - public void placeStructures(Chunk chunk) { - var craft = ((CraftChunk) chunk); - var level = craft.getCraftWorld().getHandle(); - var access = ((CraftChunk) chunk).getHandle(ChunkStatus.FULL); - level.getChunkSource().getGenerator().applyBiomeDecoration(level, access, level.structureManager()); - } - - @Override - public KMap collectStructures() { - var structureSets = registry().lookupOrThrow(Registries.STRUCTURE_SET); - var structurePlacements = registry().lookupOrThrow(Registries.STRUCTURE_PLACEMENT); - return structureSets.keySet() - .stream() - .map(structureSets::get) - .filter(Optional::isPresent) - .map(Optional::get) - .map(holder -> { - var set = holder.value(); - var placement = set.placement(); - var key = holder.key().location(); - StructurePlacement.StructurePlacementBuilder builder; - if (placement instanceof RandomSpreadStructurePlacement random) { - builder = StructurePlacement.RandomSpread.builder() - .separation(random.separation()) - .spacing(random.spacing()) - .spreadType(switch (random.spreadType()) { - case LINEAR -> IrisJigsawStructurePlacement.SpreadType.LINEAR; - case TRIANGULAR -> IrisJigsawStructurePlacement.SpreadType.TRIANGULAR; - }); - } else if (placement instanceof ConcentricRingsStructurePlacement rings) { - builder = StructurePlacement.ConcentricRings.builder() - .distance(rings.distance()) - .spread(rings.spread()) - .count(rings.count()); - } else { - Iris.warn("Unsupported structure placement for set " + key + " with type " + structurePlacements.getKey(placement.type())); - return null; - } - - return new Pair<>(new Identifier(key.getNamespace(), key.getPath()), builder - .salt(placement.salt) - .frequency(placement.frequency) - .structures(set.structures() - .stream() - .map(entry -> new StructurePlacement.Structure( - entry.weight(), - entry.structure() - .unwrapKey() - .map(ResourceKey::location) - .map(ResourceLocation::toString) - .orElse(null), - entry.structure().tags() - .map(TagKey::location) - .map(ResourceLocation::toString) - .toList() - )) - .filter(StructurePlacement.Structure::isValid) - .toList()) - .build()); - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Pair::getA, Pair::getB, (a, b) -> a, KMap::new)); - } - - public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { - if (!(raw instanceof PlatformChunkGenerator gen)) - throw new IllegalStateException("Generator is not platform chunk generator!"); - - var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", gen.getTarget().getDimension().getDimensionTypeKey()); - var dimensionType = access.lookupOrThrow(Registries.DIMENSION_TYPE).getOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, dimensionKey)); - return new LevelStem(dimensionType, chunkGenerator(access)); - } - - private net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator(RegistryAccess access) { - var settings = new FlatLevelGeneratorSettings(Optional.empty(), access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), List.of()); - settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); - settings.updateLayers(); - return new FlatLevelSource(settings); - } - - private static class ChunkAccessAdvice { - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - static boolean enter(@Advice.This ChunkAccess access, @Advice.Argument(1) int index) { - return index >= access.getPostProcessing().length; - } - } - - private static class ServerLevelAdvice { - @Advice.OnMethodEnter - static void enter( - @Advice.Argument(0) MinecraftServer server, - @Advice.Argument(3) PrimaryLevelData levelData, - @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem, - @Advice.Argument(11) World.Environment env, - @Advice.Argument(12) ChunkGenerator gen - ) { - if (gen == null || !gen.getClass().getPackageName().startsWith("art.arcane.iris")) - return; - - try { - Object bindings = Class.forName("art.arcane.iris.core.nms.INMS", true, Bukkit.getPluginManager().getPlugin("Iris") - .getClass() - .getClassLoader()) - .getDeclaredMethod("get") - .invoke(null); - levelStem = (LevelStem) bindings.getClass() - .getDeclaredMethod("levelStem", RegistryAccess.class, ChunkGenerator.class) - .invoke(bindings, server.registryAccess(), gen); - - levelData.customDimensions = null; - } catch (Throwable e) { - throw new RuntimeException("Iris failed to replace the levelStem", e instanceof InvocationTargetException ex ? ex.getCause() : e); - } - } - } -} \ No newline at end of file diff --git a/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/IrisChunkGenerator.java b/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/IrisChunkGenerator.java index b6ad534e4..098c9611e 100644 --- a/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/IrisChunkGenerator.java +++ b/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/IrisChunkGenerator.java @@ -14,8 +14,8 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.math.Position2; -import art.arcane.iris.util.reflect.WrappedField; -import art.arcane.iris.util.reflect.WrappedReturningMethod; +import art.arcane.iris.util.common.reflect.WrappedField; +import art.arcane.iris.util.common.reflect.WrappedReturningMethod; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; diff --git a/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/NMSBinding.java b/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/NMSBinding.java index 6d2620bfc..547013f58 100644 --- a/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/NMSBinding.java +++ b/nms/v1_21_R7/src/main/java/art/arcane/iris/core/nms/v1_21_R7/NMSBinding.java @@ -12,20 +12,20 @@ import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; import art.arcane.iris.engine.platform.PlatformChunkGenerator; -import art.arcane.iris.util.agent.Agent; +import art.arcane.iris.util.project.agent.Agent; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.format.C; -import art.arcane.iris.util.hunk.Hunk; +import art.arcane.iris.util.common.format.C; +import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.mantle.runtime.Mantle; import art.arcane.volmlib.util.matter.Matter; import art.arcane.volmlib.util.math.Vector3d; import art.arcane.volmlib.util.matter.MatterBiomeInject; -import art.arcane.iris.util.nbt.mca.NBTWorld; +import art.arcane.iris.util.nbt.common.mca.NBTWorld; import art.arcane.volmlib.util.nbt.mca.palette.*; import art.arcane.volmlib.util.nbt.tag.CompoundTag; -import art.arcane.iris.util.scheduling.J; +import art.arcane.iris.util.common.scheduling.J; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.shorts.ShortList; import net.bytebuddy.ByteBuddy; diff --git a/settings.gradle.kts b/settings.gradle.kts index b0b1c0b54..e7a4551f1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -42,14 +42,4 @@ if (useLocalVolmLib && localVolmLibDirectory.resolve("settings.gradle.kts").exis include(":core", ":core:agent") include( ":nms:v1_21_R7", - ":nms:v1_21_R6", - ":nms:v1_21_R5", - ":nms:v1_21_R4", - ":nms:v1_21_R3", - ":nms:v1_21_R2", - ":nms:v1_21_R1", - ":nms:v1_20_R4", - ":nms:v1_20_R3", - ":nms:v1_20_R2", - ":nms:v1_20_R1", )