{"id":15014793,"url":"https://github.com/gitbrincie212/apel-mod","last_synced_at":"2026-03-11T11:39:15.361Z","repository":{"id":246914009,"uuid":"804950860","full_name":"GitBrincie212/Apel-Mod","owner":"GitBrincie212","description":"Apel is a library that brings particle animations to the table with flexible behaviour and a clean developer interface. It promises also lots of predefined shapes \u0026 paths to help the developer on their particle scene","archived":false,"fork":false,"pushed_at":"2025-03-02T20:52:42.000Z","size":107575,"stargazers_count":3,"open_issues_count":9,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-26T03:33:17.566Z","etag":null,"topics":["animated","fabric-mod","fabricmc","fabricmc-mod","java","library","minecraft","minecraft-mod","particle","particles","server-side"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GitBrincie212.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-23T15:31:08.000Z","updated_at":"2025-03-02T21:56:29.000Z","dependencies_parsed_at":"2025-03-01T21:35:05.393Z","dependency_job_id":null,"html_url":"https://github.com/GitBrincie212/Apel-Mod","commit_stats":null,"previous_names":["gitbrincie212/apel-mod"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitBrincie212%2FApel-Mod","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitBrincie212%2FApel-Mod/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitBrincie212%2FApel-Mod/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitBrincie212%2FApel-Mod/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GitBrincie212","download_url":"https://codeload.github.com/GitBrincie212/Apel-Mod/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248538677,"owners_count":21121023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animated","fabric-mod","fabricmc","fabricmc-mod","java","library","minecraft","minecraft-mod","particle","particles","server-side"],"created_at":"2024-09-24T19:46:05.924Z","updated_at":"2026-03-11T11:39:15.315Z","avatar_url":"https://github.com/GitBrincie212.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ccenter\u003eAPEL\u003c/center\u003e\n**A**nimative **P**article **E**ngine **L**ibrary, also known as Apel is a \nfully featured minecraft library mod that promises to bring a fully featured \nparticle animation engine that has never been seen before. It comes bundled \nwith many predefined shapes and has huge capabilities; its goal is to provide \nthe developer huge flexibility and allow to easily maintain complex scenes with \nhigh performance.\nAll without the need of knowing complex mathematics (such as linear algebra, although a basic grasp is recommended)\u003cbr\u003e\u003cbr\u003e\n\n## Gallery\n\u003cp style=\"display: flex; width: 250px; gap: 30px;\"\u003e\n    \u003cimg alt=\"cone 1\" src=\"./README_media/1.webp\"\u003e\n    \u003cimg alt=\"cone 2\" src=\"./README_media/2.webp\"\u003e\n\u003c/p\u003e\n\n## Installion\nThis section is for the developers, for any normal people. Its as simple as downloading the mod and adding the jar file(not the sources) to your mods folder. For developers it has a bit more steps but its generally easy as well\n\n1. Under the ``gradle.properties`` file. Add this line:\n   ```java\n   apel_version=0.1.0+1.20.6\n   ```\n2. On ``build.gradle`` file, under the **repositery**. Add these lines if you haven't installed any other dependency mods from modrinth:\n   ```java\n   repositories {\n    // ...\n      maven {\n          url = \"https://api.modrinth.com/maven\"\n      }\n    }\n   ```\n3. On the same ``build.gradle`` file, finally we add these lines under the **dependencies**:\n   ```java\n   dependencies {\n      // ...\n      modImplementation \"maven.modrinth:apel:${project.apel_version}\"\n      // ...\n   }\n4. Refresh gradle(in Intelleji IDEA, its pressing the gradle icon with a rotate sub-icon)\n5. Try to either type ``Apel`` and let your IDE autocomplete it, or import ``net.mcbrincie.apel.Apel``. If all steps are done everything should work as expected\n\n## Key Features\n- **Particle Objects:** These are objects which render, they can be 2D, 3D shapes (such as a cube, circle, triangle) or \neven more complex ones like a cat or a dog (these aren't implemented to the library), they are classes that inherit \nfrom / extend the ``ParticleObject`` class, they also define a draw method which accepts the renderer, the current step \nthe animator is in \u0026 the position to render at. \nThis is where the render calculations happen to project the result onto the world; Particle objects can be used in \nmultiple animators which is called **multi-instancing**. \nThey can also define their own interceptors and attributes that can be modified by using the Interceptor API. \nParticle objects can also be rotated in 3D **\u003cins\u003ewhich is measured in radians\u003c/ins\u003e**. \nUnlike path animators they only use an \"amount\" of particles for the shape \n(Since the shape is not a complete but rather a dotted one, where each dot is a particle). \nWhen using the Interceptors API, you are in control of what data you want to give the user \u0026 what data can be modified. \nInterceptors are expressed as function that know have the data the object gave them and know which object they modify \nwhich means they themselves can tweak public params. Particle objects describe things in a high-level, since they are\nshapes and have specific properties to them.\n\n\n- **Path Animators:** These define the trajectory a particle object should follow. They are used to create detailed\nand even procedural animations. When beginning the animation logic, the system uses the so-called rendering steps. These are\nbasically like frames from a video(or animation) in which they define certain changes. Particle objects are aware \nwhat step they are on (as mentioned in the inner workings of the drawing method).\nAnimators can play from the start to the end or some start \u0026 some end parts can be trimmed (just like how you do in videos). \nThe problem with rendering steps is that they are constant and won't look pleasing on large distances which is why \nthere are rendering intervals. They measure the distance per rendering step which allows for more consistent looking \nanimations on larger distances (at the expense of performance. Since the server has to process more particles and calculations). \nThey hold two methods, the first being ``convertStep`` which takes care of the conversation between the rendering interval \nand the amount and ``beginAnimation`` which is where the actual logic resides in, they should support trimming. When \ntrimming happens at the start, all the calculations are done, but the particle object is not rendered, trimming on the end \njust breaks the loop. Path animators **MUST** allocate a sequence first (they can do only one) which is done by \nusing ``allocateToScheduler`` and to then draw, the method ``handleDrawingStep`` should be used. Path animators \ncome in a bundle with listeners which listen to three specific events which happen when the animator starts \nwhen it processes (each step it is called) and when the animator ends (either normally or abruptly)\u003cbr\u003e\u003cbr\u003e\n\n- **Renderers:** Renderers draw stuff in the world. They don't know which particle object calls the method but they know what to do\nwith the properties that the particle object gives them. They are described as a low-level system due to their simple nature of knowing\nwhere and what to draw in the world. They have some methods for how to draw primitive shapes(defined by the library)\u003cbr\u003e\n\n## Getting Started\nThe first obvious thing is to create an ``ParticleObject``, pick your desired object to create and supply the params,\nthe second thing is creating the path animator object to use which will describe the motion of that object. And finally\nuse on the animator the ``beginAnimation`` and supply it with ``ApelRenderer.create(world)`` where world is the \nserver world, now it should play entire animation!\u003cbr\u003e\n\n## Credits \u0026 Contributions\nThis project is founded \u0026 led by McBrincie212, contributions are welcome as long as they don't do anything shady such\nas embedding malware, doing inappropriate things... \nAfter all, the project is meant to be improved \u0026 expanded upon with new ideas, \nnew systems and more stuff that boost productivity and enhance the work experience\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitbrincie212%2Fapel-mod","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitbrincie212%2Fapel-mod","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitbrincie212%2Fapel-mod/lists"}