├── .gitattributes ├── .github └── workflows │ ├── build-on-pr.yml │ ├── devbuild.yml │ └── publish-release.yml ├── .gitignore ├── LICENSE ├── README-ES.md ├── README.md ├── build.gradle ├── docs └── scarpet │ ├── Documentation.md │ ├── Full.md │ ├── api │ ├── Auxiliary.md │ ├── BlockIterations.md │ ├── BlocksAndWorldAccess.md │ ├── Entities.md │ ├── Events.md │ ├── Inventories.md │ ├── Overview.md │ ├── Scoreboard.md │ └── ScriptCommand.md │ ├── language │ ├── Containers.md │ ├── FunctionsAndControlFlow.md │ ├── LoopsAndHigherOrderFunctions.md │ ├── Math.md │ ├── Operators.md │ ├── Overview.md │ ├── SystemFunctions.md │ └── VariablesAndConstants.md │ └── resources │ ├── editors │ ├── idea │ │ ├── 1.txt │ │ ├── 2.txt │ │ ├── 3.txt │ │ ├── 4.txt │ │ └── Idea.md │ └── npp │ │ ├── scarpet.xml │ │ ├── scarpet_v1.0_notepad++.xml │ │ ├── scarpet_v1.4_notepad++.xml │ │ ├── scarpet_v1.5_notepad++.xml │ │ ├── scarpet_v1.6_notepad++.xml │ │ └── scarpet_v1.7_notepad++.xml │ └── media │ ├── idea_customize.png │ └── idea_settings.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml ├── mergedoc.bat ├── mergedoc.sh ├── settings.gradle └── src └── main ├── java └── carpet │ ├── CarpetExtension.java │ ├── CarpetServer.java │ ├── CarpetSettings.java │ ├── api │ └── settings │ │ ├── CarpetRule.java │ │ ├── InvalidRuleValueException.java │ │ ├── Rule.java │ │ ├── RuleCategory.java │ │ ├── RuleHelper.java │ │ ├── SettingsManager.java │ │ ├── Validator.java │ │ └── Validators.java │ ├── commands │ ├── CounterCommand.java │ ├── DistanceCommand.java │ ├── DrawCommand.java │ ├── InfoCommand.java │ ├── LogCommand.java │ ├── MobAICommand.java │ ├── PerimeterInfoCommand.java │ ├── PlayerCommand.java │ ├── ProfileCommand.java │ ├── SpawnCommand.java │ └── TestCommand.java │ ├── fakes │ ├── AbstractContainerMenuInterface.java │ ├── BiomeInterface.java │ ├── BlockEntityInterface.java │ ├── BlockPistonBehaviourInterface.java │ ├── BlockPredicateInterface.java │ ├── BlockStateArgumentInterface.java │ ├── ChunkHolderInterface.java │ ├── ClientConnectionInterface.java │ ├── CommandDispatcherInterface.java │ ├── CommandNodeInterface.java │ ├── CoralFeatureInterface.java │ ├── DefaultRedstoneWireEvaluatorInferface.java │ ├── EntityInterface.java │ ├── FoodDataInterface.java │ ├── IngredientInterface.java │ ├── InventoryBearerInterface.java │ ├── ItemEntityInterface.java │ ├── LevelInterface.java │ ├── Lighting_scarpetChunkCreationInterface.java │ ├── LivingEntityInterface.java │ ├── MinecraftServerInterface.java │ ├── MobEntityInterface.java │ ├── PistonBlockEntityInterface.java │ ├── PistonBlockInterface.java │ ├── PlayerListHudInterface.java │ ├── PortalProcessorInterface.java │ ├── RandomStateVisitorAccessor.java │ ├── RedstoneWireBlockInterface.java │ ├── ServerGamePacketListenerImplInterface.java │ ├── ServerLightingProviderInterface.java │ ├── ServerPlayerInteractionManagerInterface.java │ ├── ServerPlayerInterface.java │ ├── ServerWorldInterface.java │ ├── SimpleEntityLookupInterface.java │ ├── SpawnGroupInterface.java │ ├── SpawnHelperInnerInterface.java │ ├── ThreadedAnvilChunkStorageInterface.java │ ├── TicketsFetcherInterface.java │ ├── TntEntityInterface.java │ └── WorldChunkInterface.java │ ├── helpers │ ├── BlockRotator.java │ ├── CarpetTaintedList.java │ ├── EntityPlayerActionPack.java │ ├── FertilizableCoral.java │ ├── HopperCounter.java │ ├── OptimizedExplosion.java │ ├── ParticleDisplay.java │ ├── QuasiConnectivity.java │ └── RedstoneWireTurbo.java │ ├── logging │ ├── HUDController.java │ ├── HUDLogger.java │ ├── Logger.java │ ├── LoggerRegistry.java │ └── logHelpers │ │ ├── ExplosionLogHelper.java │ │ ├── PacketCounter.java │ │ ├── PathfindingVisualizer.java │ │ ├── TNTLogHelper.java │ │ └── TrajectoryLogHelper.java │ ├── mixins │ ├── AbstractArrowMixin.java │ ├── AbstractContainerMenuSubclasses_scarpetMixin.java │ ├── AbstractContainerMenu_ctrlQCraftingMixin.java │ ├── AbstractContainerMenu_scarpetMixin.java │ ├── AbstractCraftingMenu_scarpetMixin.java │ ├── AbstractFurnaceMenu_scarpetMixin.java │ ├── AbstractMinecart_scarpetEventsMixin.java │ ├── ArmorStand_scarpetMarkerMixin.java │ ├── BarrierBlock_updateSuppressionBlockMixin.java │ ├── Biome_scarpetMixin.java │ ├── BlockBehaviourBlockStateBase_mixin.java │ ├── BlockEntity_movableBEMixin.java │ ├── BlockInput_fillUpdatesMixin.java │ ├── BlockInput_scarpetMixin.java │ ├── BlockItem_creativeNoClipMixin.java │ ├── BlockItem_scarpetEventMixin.java │ ├── BlockPredicate_scarpetMixin.java │ ├── BoundTickingBlockEntity_profilerMixin.java │ ├── BuddingAmethystBlock_movableAmethystMixin.java │ ├── ChainBlock_customStickyMixin.java │ ├── ChestBlock_customStickyMixin.java │ ├── ChunkAccess_warningsMixin.java │ ├── ChunkGenerator_customMobSpawnsMixin.java │ ├── ChunkHolder_scarpetChunkCreationMixin.java │ ├── ChunkMap_creativePlayersLoadChunksMixin.java │ ├── ChunkMap_profilerMixin.java │ ├── ChunkMap_scarpetChunkCreationMixin.java │ ├── ClientCommonPacketListenerImpl_customPacketMixin.java │ ├── ClientPacketListener_clientCommandMixin.java │ ├── ClientPacketListener_customPacketsMixin.java │ ├── ClientPacketListener_explosionMixin.java │ ├── CloneCommands_fillUpdatesMixin.java │ ├── CollectingNeighborUpdaterAccessor.java │ ├── CommandDispatcher_scarpetCommandsMixin.java │ ├── CommandNode_scarpetCommandsMixin.java │ ├── Commands_customCommandsMixin.java │ ├── Connection_packetCounterMixin.java │ ├── CoralFanBlock_renewableCoralMixin.java │ ├── CoralFeature_renewableCoralMixin.java │ ├── CoralPlantBlock_renewableCoralMixin.java │ ├── CustomPacketPayload_networkStuffMixin.java │ ├── DebugRenderer_scarpetRenderMixin.java │ ├── DefaultRedstoneWireEvaluator_redstoneMixin.java │ ├── DirectionMixin.java │ ├── DispenserBlock_cactusMixin.java │ ├── DispenserBlock_qcMixin.java │ ├── Display_scarpetEventMixin.java │ ├── DistanceManager_scarpetMixin.java │ ├── DynamicGraphMinFixedPoint_resetChunkInterface.java │ ├── EndCrystal_scarpetEventsMixin.java │ ├── EntityMixin.java │ ├── Entity_scarpetEventsMixin.java │ ├── ExperienceOrb_xpNoCooldownMixin.java │ ├── ExplosionAccessor.java │ ├── Explosion_optimizedTntMixin.java │ ├── Explosion_scarpetEventMixin.java │ ├── Explosion_xpFromBlocksMixin.java │ ├── FallingBlockEntityMixin.java │ ├── FallingBlockEntity_scarpetEventsMixin.java │ ├── FillCommandMixin.java │ ├── FlowingFluid_liquidDamageDisabledMixin.java │ ├── FoodData_scarpetMixin.java │ ├── ForceLoadCommand_forceLoadLimitMixin.java │ ├── Guardian_renewableSpongesMixin.java │ ├── Gui_tablistMixin.java │ ├── HangingEntity_scarpetEventsMixin.java │ ├── HopperBlockEntity_counterMixin.java │ ├── HopperBlock_cactusMixin.java │ ├── HorseBaseEntity_scarpetMixin.java │ ├── HugeFungusFeatureMixin.java │ ├── Husk_templesMixin.java │ ├── InfestedBlock_gravelMixin.java │ ├── Ingredient_scarpetMixin.java │ ├── Inventory_scarpetEventMixin.java │ ├── ItemEntityMixin.java │ ├── ItemStack_stackableShulkerBoxesMixin.java │ ├── Item_missingToolsMixin.java │ ├── LavaFluid_renewableDeepslateMixin.java │ ├── LayerLightEngine_scarpetChunkCreationMixin.java │ ├── LayerLightSectionStorage_scarpetChunkCreationMixin.java │ ├── LevelChunk_fillUpdatesMixin.java │ ├── LevelChunk_movableBEMixin.java │ ├── LevelEntityGetterAdapter_scarpetMixin.java │ ├── LevelLightEngine_scarpetChunkCreationMixin.java │ ├── LevelRenderer_creativeNoClipMixin.java │ ├── LevelRenderer_fogOffMixin.java │ ├── LevelRenderer_scarpetRenderMixin.java │ ├── Level_fillUpdatesMixin.java │ ├── Level_getOtherEntitiesLimited.java │ ├── Level_movableBEMixin.java │ ├── Level_scarpetPlopMixin.java │ ├── Level_tickMixin.java │ ├── LiquidBlock_renewableBlackstoneMixin.java │ ├── LiquidBlock_renewableDeepslateMixin.java │ ├── LivingEntity_cleanLogsMixin.java │ ├── LivingEntity_creativeFlyMixin.java │ ├── LivingEntity_maxCollisionsMixin.java │ ├── LivingEntity_scarpetEventsMixin.java │ ├── MerchantResultSlot_scarpetEventMixin.java │ ├── MinecraftMixin.java │ ├── MinecraftServer_coreMixin.java │ ├── MinecraftServer_pingPlayerSampleLimit.java │ ├── MinecraftServer_scarpetMixin.java │ ├── MinecraftServer_tickspeedMixin.java │ ├── Minecraft_tickMixin.java │ ├── MobCategory_spawnMixin.java │ ├── MobMixin.java │ ├── NaturalSpawnerMixin.java │ ├── Objective_scarpetMixin.java │ ├── PathNavigation_pathfindingMixin.java │ ├── PerfCommand_permissionMixin.java │ ├── PersistentEntitySectionManager_scarpetMixin.java │ ├── PieceGeneratorSupplier_plopMixin.java │ ├── PiglinBrute_getPlacementTypeMixin.java │ ├── PistonBaseBlock_movableBEMixin.java │ ├── PistonBaseBlock_qcMixin.java │ ├── PistonBaseBlock_rotatorBlockMixin.java │ ├── PistonHeadRenderer_movableBEMixin.java │ ├── PistonMovingBlockEntity_movableBEMixin.java │ ├── PistonMovingBlockEntity_playerHandlingMixin.java │ ├── PistonStructureResolver_customStickyMixin.java │ ├── PistonStructureResolver_pushLimitMixin.java │ ├── PlayerList_coreMixin.java │ ├── PlayerList_fakePlayersMixin.java │ ├── PlayerList_scarpetEventsMixin.java │ ├── PlayerTabOverlayMixin.java │ ├── Player_antiCheatDisabledMixin.java │ ├── Player_creativeNoClipMixin.java │ ├── Player_fakePlayersMixin.java │ ├── Player_parrotMixin.java │ ├── Player_scarpetEventsMixin.java │ ├── Player_xpNoCooldownMixin.java │ ├── PoiRecord_scarpetMixin.java │ ├── PortalProcessor_scarpetMixin.java │ ├── PoweredRailBlock_powerLimitMixin.java │ ├── PrimedTntMixin.java │ ├── PrimedTnt_scarpetEventsMixin.java │ ├── RandomState_ScarpetMixin.java │ ├── RedstoneWireBlock_fastMixin.java │ ├── ReloadCommand_reloadAppsMixin.java │ ├── SaplingBlock_desertShrubsMixin.java │ ├── Scoreboard_scarpetMixin.java │ ├── SculkSensorBlockEntityVibrationConfig_sculkSensorRangeMixin.java │ ├── ServerChunkCacheMixin.java │ ├── ServerChunkCache_profilerMixin.java │ ├── ServerFunctionManager_profilerMixin.java │ ├── ServerGamePacketListenerImplMixin.java │ ├── ServerGamePacketListenerImpl_antiCheatDisabledMixin.java │ ├── ServerGamePacketListenerImpl_coreMixin.java │ ├── ServerGamePacketListenerImpl_interactionUpdatesMixin.java │ ├── ServerGamePacketListenerImpl_scarpetEventsMixin.java │ ├── ServerGamePacketListenerimpl_connectionMixin.java │ ├── ServerLevel_scarpetMixin.java │ ├── ServerLevel_tickMixin.java │ ├── ServerPlayerGameMode_antiCheatMixin.java │ ├── ServerPlayerGameMode_cactusMixin.java │ ├── ServerPlayerGameMode_scarpetEventsMixin.java │ ├── ServerPlayer_actionPackMixin.java │ ├── ServerPlayer_scarpetEventMixin.java │ ├── ServerStatus_motdMixin.java │ ├── ServerboundSetStructureBlockPacketMixin.java │ ├── SetBlockCommand_fillUpdatesMixin.java │ ├── ShulkerBoxAccessMixin.java │ ├── ShulkerBoxBlockEntity_creativeNoClipMixin.java │ ├── SpawnState_scarpetMixin.java │ ├── StandingAndWallBlockItem_creativeNoClipMixin.java │ ├── StructureBlockEntity_fillUpdatesMixin.java │ ├── StructureBlockEntity_limitsMixin.java │ ├── StructureBlockRenderer_mixin.java │ ├── StructurePiece_scarpetPlopMixin.java │ ├── StructureTemplate_fillUpdatesMixin.java │ ├── SummonCommand_lightningMixin.java │ ├── SystemReport_addScarpetAppsMixin.java │ ├── TagPredicate_scarpetMixin.java │ ├── TheEndGatewayBlockEntity_creativeNoClipMixin.java │ ├── ThreadedLevelLightEngine_scarpetChunkCreationMixin.java │ ├── ThreadedLevelLightEngine_scarpetMixin.java │ ├── ThrowableProjectileMixin.java │ ├── TicketStorage_scarpetMixin.java │ ├── TntBlock_noUpdateMixin.java │ ├── UseOnContext_cactusMixin.java │ ├── Villager_aiMixin.java │ ├── WitherBoss_moreBlueMixin.java │ ├── WoolCarpetBlock_placeMixin.java │ ├── WorldBorder_syncedWorldBorderMixin.java │ └── WorldGenRegion_scarpetPlopMixin.java │ ├── network │ ├── CarpetClient.java │ ├── ClientNetworkHandler.java │ └── ServerNetworkHandler.java │ ├── patches │ ├── EntityPlayerMPFake.java │ ├── FakeClientConnection.java │ ├── NetHandlerPlayServerFake.java │ └── TickSyncedBorderExtent.java │ ├── script │ ├── CarpetContext.java │ ├── CarpetEventServer.java │ ├── CarpetExpression.java │ ├── CarpetScriptHost.java │ ├── CarpetScriptServer.java │ ├── Context.java │ ├── EntityEventsGroup.java │ ├── Expression.java │ ├── Fluff.java │ ├── LazyValue.java │ ├── Module.java │ ├── ScriptCommand.java │ ├── ScriptHost.java │ ├── ScriptServer.java │ ├── Token.java │ ├── Tokenizer.java │ ├── annotation │ │ ├── AnnotationParser.java │ │ ├── ListConverter.java │ │ ├── Locator.java │ │ ├── MapConverter.java │ │ ├── OptionalConverter.java │ │ ├── OutputConverter.java │ │ ├── Param.java │ │ ├── ScarpetFunction.java │ │ ├── SimpleTypeConverter.java │ │ ├── ValueCaster.java │ │ ├── ValueConverter.java │ │ └── package-info.java │ ├── api │ │ ├── Auxiliary.java │ │ ├── BlockIterators.java │ │ ├── Entities.java │ │ ├── Inventories.java │ │ ├── Monitoring.java │ │ ├── Scoreboards.java │ │ ├── Threading.java │ │ ├── WorldAccess.java │ │ └── package-info.java │ ├── argument │ │ ├── Argument.java │ │ ├── BlockArgument.java │ │ ├── FileArgument.java │ │ ├── FunctionArgument.java │ │ ├── Vector3Argument.java │ │ └── package-info.java │ ├── command │ │ ├── CommandArgument.java │ │ ├── CommandToken.java │ │ └── package-info.java │ ├── exception │ │ ├── BreakStatement.java │ │ ├── CarpetExpressionException.java │ │ ├── ContinueStatement.java │ │ ├── ExitStatement.java │ │ ├── ExpressionException.java │ │ ├── IntegrityException.java │ │ ├── InternalExpressionException.java │ │ ├── InvalidCallbackException.java │ │ ├── LoadException.java │ │ ├── ProcessedThrowStatement.java │ │ ├── ResolvedException.java │ │ ├── ReturnStatement.java │ │ ├── StacklessRuntimeException.java │ │ ├── ThrowStatement.java │ │ ├── Throwables.java │ │ └── package-info.java │ ├── external │ │ ├── Carpet.java │ │ ├── Vanilla.java │ │ ├── VanillaClient.java │ │ └── package-info.java │ ├── language │ │ ├── Arithmetic.java │ │ ├── ControlFlow.java │ │ ├── DataStructures.java │ │ ├── Functions.java │ │ ├── Loops.java │ │ ├── Operators.java │ │ ├── Sys.java │ │ ├── Threading.java │ │ └── package-info.java │ ├── package-info.java │ ├── utils │ │ ├── AppStoreManager.java │ │ ├── BiomeInfo.java │ │ ├── Colors.java │ │ ├── EntityTools.java │ │ ├── EquipmentInventory.java │ │ ├── Experimental.java │ │ ├── FeatureGenerator.java │ │ ├── GlocalFlag.java │ │ ├── InputValidator.java │ │ ├── ParticleParser.java │ │ ├── PerlinNoiseSampler.java │ │ ├── RecipeHelper.java │ │ ├── ScarpetJsonDeserializer.java │ │ ├── ShapeDispatcher.java │ │ ├── ShapesRenderer.java │ │ ├── SimplexNoiseSampler.java │ │ ├── SnoopyCommandSource.java │ │ ├── SystemInfo.java │ │ ├── Tracer.java │ │ ├── WorldTools.java │ │ ├── package-info.java │ │ └── shapes │ │ │ ├── ShapeDirection.java │ │ │ └── package-info.java │ └── value │ │ ├── AbstractListValue.java │ │ ├── BlockValue.java │ │ ├── BooleanValue.java │ │ ├── ContainerValueInterface.java │ │ ├── EntityValue.java │ │ ├── FormattedTextValue.java │ │ ├── FrameworkValue.java │ │ ├── FunctionAnnotationValue.java │ │ ├── FunctionSignatureValue.java │ │ ├── FunctionUnpackedArgumentsValue.java │ │ ├── FunctionValue.java │ │ ├── LContainerValue.java │ │ ├── LazyListValue.java │ │ ├── ListValue.java │ │ ├── MapValue.java │ │ ├── NBTSerializableValue.java │ │ ├── NullValue.java │ │ ├── NumericValue.java │ │ ├── ScreenValue.java │ │ ├── StringValue.java │ │ ├── ThreadValue.java │ │ ├── UndefValue.java │ │ ├── Value.java │ │ ├── ValueConversions.java │ │ └── package-info.java │ ├── settings │ ├── Condition.java │ ├── ParsedRule.java │ ├── Rule.java │ ├── RuleCategory.java │ ├── SettingsManager.java │ └── Validator.java │ └── utils │ ├── BlockInfo.java │ ├── CarpetProfiler.java │ ├── CarpetRulePrinter.java │ ├── CommandHelper.java │ ├── DistanceCalculator.java │ ├── EvictingQueue.java │ ├── FabricAPIHooks.java │ ├── Messenger.java │ ├── MobAI.java │ ├── PerimeterDiagnostics.java │ ├── SpawnOverrides.java │ ├── SpawnReporter.java │ ├── TranslationKeys.java │ ├── Translations.java │ └── WoolTool.java └── resources ├── assets └── carpet │ ├── icon.png │ ├── lang │ ├── en_us.json │ ├── es_ar.json │ ├── fr_fr.json │ ├── pt_br.json │ ├── zh_cn.json │ └── zh_tw.json │ └── scripts │ ├── ai_tracker.sc │ ├── camera.sc │ ├── chunk_display.sc │ ├── distance_beta.sc │ ├── draw_beta.sc │ ├── event_test.sc │ ├── math.scl │ ├── overlay.sc │ ├── shapes.scl │ └── stats_test.sc ├── carpet.accesswidener ├── carpet.mixins.json └── fabric.mod.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sc linguist-language=Python 2 | *.scl linguist-language=Python 3 | -------------------------------------------------------------------------------- /.github/workflows/build-on-pr.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Gradle 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle 3 | 4 | name: Pull Request Builds 5 | 6 | on: [pull_request] 7 | 8 | jobs: 9 | Build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Set up JDK 21 15 | uses: actions/setup-java@v4 16 | with: 17 | distribution: 'temurin' 18 | java-version: 21 19 | cache: 'gradle' 20 | - name: Grant execute permission to gradlew 21 | run: chmod +x gradlew 22 | - name: Build with Gradle 23 | run: ./gradlew build 24 | - uses: actions/upload-artifact@v4 25 | with: 26 | name: "Compiled artifacts for Pull Request #${{github.event.number}}" 27 | path: build/libs 28 | -------------------------------------------------------------------------------- /.github/workflows/devbuild.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Gradle 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle 3 | 4 | name: Development Builds 5 | 6 | on: [push] 7 | 8 | jobs: 9 | Build: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: Set up JDK 21 16 | uses: actions/setup-java@v4 17 | with: 18 | distribution: 'temurin' 19 | java-version: 21 20 | cache: 'gradle' 21 | - name: Grant execute permission to gradlew 22 | run: chmod +x gradlew 23 | - name: Build with Gradle 24 | run: ./gradlew build 25 | - uses: actions/upload-artifact@v4 26 | with: 27 | name: Compiled artifacts for ${{ github.sha }} 28 | path: build/libs 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | 3 | .gradle/ 4 | build/ 5 | out/ 6 | lout/ 7 | classes/ 8 | publish/ 9 | 10 | # git 11 | 12 | .shelf/ 13 | 14 | # idea 15 | 16 | .idea/ 17 | *.iml 18 | *.ipr 19 | *.iws 20 | 21 | # eclipse 22 | *.launch 23 | 24 | # vscode 25 | 26 | .settings/ 27 | .vscode/ 28 | bin/ 29 | .classpath 30 | .project 31 | *.code-workspace 32 | 33 | # fabric 34 | 35 | run/ 36 | logs/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 gnembon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/scarpet/Documentation.md: -------------------------------------------------------------------------------- 1 | # Scarpet Language Documentation 2 | 3 | ## Language Specification 4 | 5 | [Overview](/docs/scarpet/language/Overview.md) 6 | 7 | [Variables and Constants](/docs/scarpet/language/VariablesAndConstants.md) 8 | 9 | [Operators](/docs/scarpet/language/Operators.md) 10 | 11 | [Mathematical Functions](/docs/scarpet/language/Math.md) 12 | 13 | [System Functions](/docs/scarpet/language/SystemFunctions.md) 14 | 15 | [Loops and Higher Order Functions](/docs/scarpet/language/LoopsAndHigherOrderFunctions.md) 16 | 17 | [User Defined Functions and Control Flow](/docs/scarpet/language/FunctionsAndControlFlow.md) 18 | 19 | [Container Types](/docs/scarpet/language/Containers.md) 20 | 21 | ## Minecraft API 22 | 23 | [Overview](/docs/scarpet/api/Overview.md) 24 | 25 | [Blocks and World Access](/docs/scarpet/api/BlocksAndWorldAccess.md) 26 | 27 | [Block Iterations](/docs/scarpet/api/BlockIterations.md) 28 | 29 | [Entities](/docs/scarpet/api/Entities.md) 30 | 31 | [Inventories](/docs/scarpet/api/Inventories.md) 32 | 33 | [Events](/docs/scarpet/api/Events.md) 34 | 35 | [Scoreboard manipulation](/docs/scarpet/api/Scoreboard.md) 36 | 37 | [Auxiliary Functions](/docs/scarpet/api/Auxiliary.md) 38 | 39 | [`/script` Command](/docs/scarpet/api/ScriptCommand.md) 40 | 41 | ## [One Page](/docs/scarpet/Full.md) 42 | 43 | -------------------------------------------------------------------------------- /docs/scarpet/resources/editors/idea/1.txt: -------------------------------------------------------------------------------- 1 | abs 2 | acos 3 | acosh 4 | acot 5 | all 6 | and 7 | asin 8 | asinh 9 | atan 10 | atan2 11 | atanh 12 | bitwise_and 13 | bitwise_or 14 | bitwise_xor 15 | bitwise_shift_left 16 | bitwise_shift_right 17 | bitwise_roll_left 18 | bitwise_roll_right 19 | bitwise_not 20 | bitwise_popcount 21 | bool 22 | break 23 | call 24 | ceil 25 | c_for 26 | continue 27 | copy 28 | cos 29 | cosh 30 | cot 31 | coth 32 | csc 33 | csch 34 | decreasing 35 | deg 36 | delete 37 | difference 38 | double_to_long_bits 39 | equal 40 | exit 41 | fact 42 | filter 43 | first 44 | floor 45 | for 46 | get 47 | has 48 | hash_code 49 | if 50 | import 51 | increasing 52 | join 53 | keys 54 | l 55 | length 56 | log 57 | log10 58 | log1p 59 | long_bits_to_double 60 | loop 61 | lower 62 | m 63 | mandelbrot 64 | map 65 | max 66 | min 67 | nondecreasing 68 | nonincreasing 69 | not 70 | number 71 | or 72 | outer 73 | pairs 74 | perlin 75 | print 76 | product 77 | profile_expr 78 | put 79 | quotient 80 | rad 81 | rand 82 | range 83 | reduce 84 | relu 85 | replace 86 | replace_first 87 | reset_seed 88 | return 89 | round 90 | sec 91 | sech 92 | simplex 93 | sin 94 | sinh 95 | sleep 96 | slice 97 | sort 98 | sort_key 99 | sum 100 | synchronize 101 | system_variable_get 102 | system_variable_set 103 | split 104 | sqrt 105 | str 106 | tan 107 | tanh 108 | task 109 | task_completed 110 | task_count 111 | task_dock 112 | task_join 113 | task_thread 114 | task_value 115 | then 116 | throw 117 | time 118 | title 119 | try 120 | type 121 | undef 122 | unique 123 | upper 124 | values 125 | var 126 | vars 127 | while 128 | -------------------------------------------------------------------------------- /docs/scarpet/resources/editors/idea/3.txt: -------------------------------------------------------------------------------- 1 | _ 2 | _a 3 | _i 4 | _x 5 | _y 6 | _z 7 | _trace 8 | euler 9 | false 10 | null 11 | pi 12 | true -------------------------------------------------------------------------------- /docs/scarpet/resources/editors/idea/Idea.md: -------------------------------------------------------------------------------- 1 | # Custom Language Support for Intellij 2 | 3 | ### Add scarpet to registered file types (`.sc` and `.scl`) 4 | 5 |  6 | 7 | ### When adding use the following settings 8 | 9 |  10 | 11 | ### Grab lists of keywords (1,2,3 and 4) from the following files: 12 | 13 | [1](/docs/scarpet/resources/editors/idea/1.txt) 14 | [2](/docs/scarpet/resources/editors/idea/2.txt) 15 | [3](/docs/scarpet/resources/editors/idea/3.txt) 16 | [4](/docs/scarpet/resources/editors/idea/4.txt) 17 | -------------------------------------------------------------------------------- /docs/scarpet/resources/media/idea_customize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gnembon/fabric-carpet/5f9744e065242643b3307c720c4961480f3b4c20/docs/scarpet/resources/media/idea_customize.png -------------------------------------------------------------------------------- /docs/scarpet/resources/media/idea_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gnembon/fabric-carpet/5f9744e065242643b3307c720c4961480f3b4c20/docs/scarpet/resources/media/idea_settings.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Done to increase the memory available to gradle. 2 | org.gradle.jvmargs=-Xmx1G 3 | 4 | # Fabric Properties 5 | # check https://fabricmc.net/develop/ 6 | minecraft_version=1.21.6-pre1 7 | loader_version=0.16.10 8 | jsr305_version=3.0.2 9 | fabric_version=0.119.5+1.21.5 10 | 11 | # Mod Properties 12 | mod_version = 1.4.175 13 | maven_group = carpet 14 | archives_base_name = fabric-carpet 15 | 16 | # Release Action properties for Curseforge and Snapshots 17 | # The Curseforge versions "names" or ids for the main branch (comma separated: 1.16.4,1.16.5) 18 | # This is needed because CF uses too vague names for prereleases and release candidates 19 | # Can also be the version ID directly coming from https://minecraft.curseforge.com/api/game/versions?token=[API_TOKEN] 20 | release-curse-versions = Minecraft 1.21:1.21.6-Snapshot 21 | # Whether or not to build another branch on release 22 | release-extra-branch = false 23 | # The name of the second branch to release 24 | release-extra-branch-name = 1.20.4 25 | # The "name" or id of the Curseforge version for the secondary branch 26 | # This is needed because CF uses too vague names for snapshots 27 | # Can also be the version ID directly coming from https://minecraft.curseforge.com/api/game/versions?token=[API_TOKEN] 28 | release-extra-curse-version = Minecraft 1.20:1.20.4-Snapshot 29 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gnembon/fabric-carpet/5f9744e065242643b3307c720c4961480f3b4c20/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /jitpack.yml: -------------------------------------------------------------------------------- 1 | before_install: 2 | - sdk install java 21.0.2-open 3 | - sdk use java 21.0.2-open 4 | -------------------------------------------------------------------------------- /mergedoc.bat: -------------------------------------------------------------------------------- 1 | cat docs/scarpet/language/Overview.md docs/scarpet/language/VariablesAndConstants.md docs/scarpet/language/Operators.md docs/scarpet/language/Math.md docs/scarpet/language/SystemFunctions.md docs/scarpet/language/LoopsAndHigherOrderFunctions.md docs/scarpet/language/FunctionsAndControlFlow.md docs/scarpet/language/Containers.md docs/scarpet/api/Overview.md docs/scarpet/api/BlocksAndWorldAccess.md docs/scarpet/api/BlockIterations.md docs/scarpet/api/Entities.md docs/scarpet/api/Inventories.md docs/scarpet/api/Events.md docs/scarpet/api/Scoreboard.md docs/scarpet/api/Auxiliary.md docs/scarpet/api/ScriptCommand.md > docs/scarpet/Full.md 2 | 3 | -------------------------------------------------------------------------------- /mergedoc.sh: -------------------------------------------------------------------------------- 1 | cat docs/scarpet/language/Overview.md docs/scarpet/language/VariablesAndConstants.md docs/scarpet/language/Operators.md docs/scarpet/language/Math.md docs/scarpet/language/SystemFunctions.md docs/scarpet/language/LoopsAndHigherOrderFunctions.md docs/scarpet/language/FunctionsAndControlFlow.md docs/scarpet/language/Containers.md docs/scarpet/api/Overview.md docs/scarpet/api/BlocksAndWorldAccess.md docs/scarpet/api/BlockIterations.md docs/scarpet/api/Entities.md docs/scarpet/api/Inventories.md docs/scarpet/api/Events.md docs/scarpet/api/Scoreboard.md docs/scarpet/api/Auxiliary.md docs/scarpet/api/ScriptCommand.md > docs/scarpet/Full.md 2 | 3 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { // for all the fabric stuffs 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | gradlePluginPortal() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/carpet/api/settings/InvalidRuleValueException.java: -------------------------------------------------------------------------------- 1 | package carpet.api.settings; 2 | 3 | import carpet.utils.Messenger; 4 | import net.minecraft.commands.CommandSourceStack; 5 | 6 | /** 7 | *
An {@link Exception} thrown when the value given for a {@link CarpetRule} is invalid.
8 | * 9 | *It can hold a message to be sent to the executing source.
10 | */ 11 | public class InvalidRuleValueException extends Exception { 12 | 13 | /** 14 | *Constructs a new {@link InvalidRuleValueException} with a message that will be passed to the executing source
15 | * @param cause The cause of the exception 16 | */ 17 | public InvalidRuleValueException(String cause) { 18 | super(cause); 19 | } 20 | 21 | /** 22 | *Constructs a new {@link InvalidRuleValueException} with no detail message, that therefore should not notify the source
23 | */ 24 | public InvalidRuleValueException() { 25 | super(); 26 | } 27 | 28 | /** 29 | *Notifies the given source with the exception's message if it exists, does nothing if it doesn't exist or it is {@code null}
30 | * @param source The source to notify 31 | */ 32 | public void notifySource(String ruleName, CommandSourceStack source) { 33 | if (getMessage() != null) 34 | Messenger.m(source, "r Couldn't set value for rule " + ruleName + ": "+ getMessage()); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/carpet/api/settings/RuleCategory.java: -------------------------------------------------------------------------------- 1 | package carpet.api.settings; 2 | 3 | /** 4 | *Multiple categories for rules that Carpet uses and can be used to group other rules under the same 5 | * categories.
6 | * 7 | *These are not the only categories that can be used, you can create your own ones for your rules 8 | * and they will be added to the SettingsManager.
9 | * 10 | */ 11 | public class RuleCategory { 12 | public static final String BUGFIX = "bugfix"; 13 | public static final String SURVIVAL = "survival"; 14 | public static final String CREATIVE = "creative"; 15 | public static final String EXPERIMENTAL = "experimental"; 16 | public static final String OPTIMIZATION = "optimization"; 17 | public static final String FEATURE = "feature"; 18 | public static final String COMMAND = "command"; 19 | public static final String TNT = "tnt"; 20 | public static final String DISPENSER = "dispenser"; 21 | public static final String SCARPET = "scarpet"; 22 | /** 23 | * Rules with this {@link RuleCategory} will have a client-side 24 | * counterpart, so they can be set independently without the server 25 | * running Carpet 26 | */ 27 | public static final String CLIENT = "client"; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/carpet/commands/TestCommand.java: -------------------------------------------------------------------------------- 1 | package carpet.commands; 2 | 3 | import carpet.CarpetServer; 4 | import carpet.utils.Messenger; 5 | import com.mojang.brigadier.CommandDispatcher; 6 | import com.mojang.brigadier.context.CommandContext; 7 | import net.minecraft.commands.CommandSourceStack; 8 | 9 | import static com.mojang.brigadier.arguments.StringArgumentType.getString; 10 | import static com.mojang.brigadier.arguments.StringArgumentType.word; 11 | import static net.minecraft.commands.Commands.argument; 12 | import static net.minecraft.commands.Commands.literal; 13 | 14 | public class TestCommand 15 | { 16 | public static void register(CommandDispatcher