<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://forge.gemwire.uk/index.php?action=history&amp;feed=atom&amp;title=Particles</id>
	<title>Particles - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://forge.gemwire.uk/index.php?action=history&amp;feed=atom&amp;title=Particles"/>
	<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Particles&amp;action=history"/>
	<updated>2026-05-01T18:02:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2886&amp;oldid=prev</id>
		<title>ChampionAsh5357: Update to 1.17</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2886&amp;oldid=prev"/>
		<updated>2021-08-02T21:26:10Z</updated>

		<summary type="html">&lt;p&gt;Update to 1.17&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:26, 2 August 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot; &gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Creating a Particle ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Creating a Particle ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A particle can be broken up into four distinct classes. On the server, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; to sync the information. On the client, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt; is used to generate a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; from the synced &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt;. To be more specific, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds the registry reference of the particle itself. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;An &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; hooks into a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; to send information to the &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;An &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt; creates the specified particle in some place within the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;world&lt;/del&gt;. Then, the &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; goes and handles the rendering logic to make it appear in game.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A particle can be broken up into four distinct classes. On the server, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; to sync the information. On the client, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt; is used to generate a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; from the synced &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt;. To be more specific, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds the registry reference of the particle itself. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;A &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; hooks into a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; to send information to the &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;A &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt; creates the specified particle in some place within the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;level&lt;/ins&gt;. Then, the &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; goes and handles the rendering logic to make it appear in game.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;While there are a lot of different particles in vanilla, in almost all cases vanilla uses &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;BasicParticleType&lt;/del&gt;&amp;lt;/code&amp;gt;, a basic implementation of &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt;. This is used whenever server data is not necessary to spawn the particle. The only vanilla particles that do not use &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;BasicParticleType&lt;/del&gt;&amp;lt;/code&amp;gt; are redstone dust and block/item texture dependent particles. When requiring server data, a direct implementation of &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; is needed. A good way is to extend &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; and implement &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; on the same class. In the case of a more generic solution, an implementation of &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; can be referenced while the standard &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; class is used.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;While there are a lot of different particles in vanilla, in almost all cases vanilla uses &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;SimpleParticleType&lt;/ins&gt;&amp;lt;/code&amp;gt;, a basic implementation of &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt;. This is used whenever server data is not necessary to spawn the particle. The only vanilla particles that do not use &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;SimpleParticleType&lt;/ins&gt;&amp;lt;/code&amp;gt; are redstone dust and block/item texture dependent particles. When requiring server data, a direct implementation of &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; is needed. A good way is to extend &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; and implement &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; on the same class. In the case of a more generic solution, an implementation of &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; can be referenced while the standard &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; class is used.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s must be [[Registration#registering-things|registered]].  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s must be [[Registration#registering-things|registered]].  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Beside the standard reference to a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;&amp;lt;/code&amp;gt; is made up of two main methods and two accessory methods for compatibility across Minecraft usage.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Beside the standard reference to a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;&amp;lt;/code&amp;gt; is made up of two main methods and two accessory methods for compatibility across Minecraft usage.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;First there are the sync methods:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;First there are the sync methods:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;write&lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PacketBuffer&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;writeToNetwork&lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;FriendlyByteBuf&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;$&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IDeserializer&lt;/del&gt;#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;read&lt;/del&gt;(ParticleType, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PacketBuffer&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;$&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Deserializer&lt;/ins&gt;#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;fromNetwork&lt;/ins&gt;(ParticleType, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;FriendlyByteBuf&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot; &gt;Line 28:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 28:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The other two are for compatibility with other Minecraft systems:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The other two are for compatibility with other Minecraft systems:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;getParameters&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;writeToString&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleData&lt;/del&gt;$&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IDeserializer&lt;/del&gt;#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;deserialize&lt;/del&gt;(ParticleType, StringReader)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleOptions&lt;/ins&gt;$&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Deserializer&lt;/ins&gt;#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;fromCommand&lt;/ins&gt;(ParticleType, StringReader)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These two are used to read/write data to NBT as well as get information to spawn the particle in the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;world &lt;/del&gt;using a command.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These two are used to read/write data to NBT as well as get information to spawn the particle in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;level &lt;/ins&gt;using a command.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s ===  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s will be left as an exercise to the reader as it is mainly about deciding what the reader wants to render to the screen. One of the most common classes to subclass, however, is &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;SpriteTexturedParticle&lt;/del&gt;&amp;lt;/code&amp;gt;. This abstract class renders a texture specified by the user as the particle to go according to the logic rendered.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s will be left as an exercise to the reader as it is mainly about deciding what the reader wants to render to the screen. One of the most common classes to subclass, however, is &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;TextureSheetParticle&lt;/ins&gt;&amp;lt;/code&amp;gt;. This abstract class renders a texture specified by the user as the particle to go according to the logic rendered.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt;s ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt;s ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Finally, a particle must be created using &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt;. This simply just decides where the particle should be placed in the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;world &lt;/del&gt;at some speed in most cases. Since a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; is not beholden to any particular &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, it can be reused over and over again in different factories if necessary.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Finally, a particle must be created using &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt;. This simply just decides where the particle should be placed in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;level &lt;/ins&gt;at some speed in most cases. Since a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; is not beholden to any particular &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, it can be reused over and over again in different factories if necessary.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;An &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt; must be attached to a &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ParticleManager&lt;/del&gt;#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;registerFactory&lt;/del&gt;&amp;lt;/code&amp;gt;. This should be called during &amp;lt;code&amp;gt;ParticleFactoryRegisterEvent&amp;lt;/code&amp;gt; on the mod event bus.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;A &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt; must be attached to a &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleEngine&lt;/ins&gt;#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;register&lt;/ins&gt;&amp;lt;/code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. If a particle has a json defined sprite location, then the &amp;lt;code&amp;gt;ParticleEngine$SpriteParticleRegistration&amp;lt;/code&amp;gt; variant must be used instead as otherwise an exception will be thrown&lt;/ins&gt;. This should be called during &amp;lt;code&amp;gt;ParticleFactoryRegisterEvent&amp;lt;/code&amp;gt; on the mod event bus.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Tip/Important|&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;IParticleFactory&lt;/del&gt;&amp;lt;/code&amp;gt; is only present on the client, so the event needs to be isolated via &amp;lt;code&amp;gt;DistExecutor&amp;lt;/code&amp;gt; or some other method.}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Tip/Important|&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ParticleProvider&lt;/ins&gt;&amp;lt;/code&amp;gt; is only present on the client, so the event needs to be isolated via &amp;lt;code&amp;gt;DistExecutor&amp;lt;/code&amp;gt; or some other method.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;world &lt;/del&gt;instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ClientWorld&lt;/del&gt;&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;addOptionalParticle&lt;/del&gt;&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ServerWorld&lt;/del&gt;&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;spawnParticle&lt;/del&gt;&amp;lt;/code&amp;gt; as it sends a packet to the client &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;world &lt;/del&gt;to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ClientWorld&lt;/del&gt;&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;level &lt;/ins&gt;instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ClientLevel&lt;/ins&gt;&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;addAlwaysVisibleParticle&lt;/ins&gt;&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ServerLevel&lt;/ins&gt;&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sendParticles&lt;/ins&gt;&amp;lt;/code&amp;gt; as it sends a packet to the client &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;level &lt;/ins&gt;to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ClientLevel&lt;/ins&gt;&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Game Effects]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Game Effects]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ChampionAsh5357</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2609&amp;oldid=prev</id>
		<title>ShrimpBot: Categorize with Category:Game Effects by SizableShrimp#0755</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2609&amp;oldid=prev"/>
		<updated>2021-05-18T23:15:07Z</updated>

		<summary type="html">&lt;p&gt;Categorize with &lt;a href=&quot;/index.php?title=Category:Game_Effects&amp;amp;action=tinymceedit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Game Effects (page does not exist)&quot;&gt;Category:Game Effects&lt;/a&gt; by SizableShrimp#0755&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:15, 18 May 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l49&quot; &gt;Line 49:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a world instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;addOptionalParticle&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;ServerWorld&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;spawnParticle&amp;lt;/code&amp;gt; as it sends a packet to the client world to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a world instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;addOptionalParticle&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;ServerWorld&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;spawnParticle&amp;lt;/code&amp;gt; as it sends a packet to the client world to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Game Effects]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ShrimpBot</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2260&amp;oldid=prev</id>
		<title>SciWhiz12: Text replacement - &quot;{{Colored box|title=Important|content=&quot; to &quot;{{Tip/Important|&quot;</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2260&amp;oldid=prev"/>
		<updated>2020-12-20T18:11:06Z</updated>

		<summary type="html">&lt;p&gt;Text replacement - &amp;quot;{{Colored box|title=Important|content=&amp;quot; to &amp;quot;{{Tip/Important|&amp;quot;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:11, 20 December 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l44&quot; &gt;Line 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; must be attached to a &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;ParticleManager#registerFactory&amp;lt;/code&amp;gt;. This should be called during &amp;lt;code&amp;gt;ParticleFactoryRegisterEvent&amp;lt;/code&amp;gt; on the mod event bus.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; must be attached to a &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;ParticleManager#registerFactory&amp;lt;/code&amp;gt;. This should be called during &amp;lt;code&amp;gt;ParticleFactoryRegisterEvent&amp;lt;/code&amp;gt; on the mod event bus.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Colored box|title=&lt;/del&gt;Important|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;content=&lt;/del&gt;&amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; is only present on the client, so the event needs to be isolated via &amp;lt;code&amp;gt;DistExecutor&amp;lt;/code&amp;gt; or some other method.}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Tip/&lt;/ins&gt;Important|&amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; is only present on the client, so the event needs to be isolated via &amp;lt;code&amp;gt;DistExecutor&amp;lt;/code&amp;gt; or some other method.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Spawning Particles ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a world instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;addOptionalParticle&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;ServerWorld&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;spawnParticle&amp;lt;/code&amp;gt; as it sends a packet to the client world to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Particles can be spawned from a world instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;addOptionalParticle&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;ServerWorld&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;spawnParticle&amp;lt;/code&amp;gt; as it sends a packet to the client world to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SciWhiz12</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2175&amp;oldid=prev</id>
		<title>Unbekannt: Inital Import dokuwiki</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Particles&amp;diff=2175&amp;oldid=prev"/>
		<updated>2020-10-25T11:37:19Z</updated>

		<summary type="html">&lt;p&gt;Inital Import dokuwiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Particles are one of the few effects within the game that are used as polish to better improve immersion. Their usefulness also requires great caution due to how they are created and referenced in the game.&lt;br /&gt;
&lt;br /&gt;
== Sided Issues ==&lt;br /&gt;
Particles are problematic due to their presence only on the [[Sides|physical client]]. They have no existence on a server whatsoever. This means that if specific data from a server is needed, it needs to be synced from the server to create the particle on the client.&lt;br /&gt;
&lt;br /&gt;
== Creating a Particle ==&lt;br /&gt;
A particle can be broken up into four distinct classes. On the server, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds an &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; to sync the information. On the client, an &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; is used to generate a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; from the synced &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt;. To be more specific, a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; holds the registry reference of the particle itself. An &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; hooks into a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; to send information to the &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt;. An &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; creates the specified particle in some place within the world. Then, the &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; goes and handles the rendering logic to make it appear in game.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s ===&lt;br /&gt;
&lt;br /&gt;
While there are a lot of different particles in vanilla, in almost all cases vanilla uses &amp;lt;code&amp;gt;BasicParticleType&amp;lt;/code&amp;gt;, a basic implementation of &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt;. This is used whenever server data is not necessary to spawn the particle. The only vanilla particles that do not use &amp;lt;code&amp;gt;BasicParticleType&amp;lt;/code&amp;gt; are redstone dust and block/item texture dependent particles. When requiring server data, a direct implementation of &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; is needed. A good way is to extend &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; and implement &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; on the same class. In the case of a more generic solution, an implementation of &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; can be referenced while the standard &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt; class is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt;s must be [[Registration#registering-things|registered]]. &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Beside the standard reference to a &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, an &amp;lt;code&amp;gt;IParticleData&amp;lt;/code&amp;gt; is made up of two main methods and two accessory methods for compatibility across Minecraft usage.&lt;br /&gt;
&lt;br /&gt;
First there are the sync methods:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
IParticleData#write(PacketBuffer)&lt;br /&gt;
&lt;br /&gt;
IParticleData$IDeserializer#read(ParticleType, PacketBuffer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two are used to sync information across the network. All information from the server should be synced in this fashion.&lt;br /&gt;
&lt;br /&gt;
The other two are for compatibility with other Minecraft systems:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
IParticleData#getParameters&lt;br /&gt;
&lt;br /&gt;
IParticleData$IDeserializer#deserialize(ParticleType, StringReader)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two are used to read/write data to NBT as well as get information to spawn the particle in the world using a command.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt;s will be left as an exercise to the reader as it is mainly about deciding what the reader wants to render to the screen. One of the most common classes to subclass, however, is &amp;lt;code&amp;gt;SpriteTexturedParticle&amp;lt;/code&amp;gt;. This abstract class renders a texture specified by the user as the particle to go according to the logic rendered.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt;s ===&lt;br /&gt;
Finally, a particle must be created using an &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt;. This simply just decides where the particle should be placed in the world at some speed in most cases. Since a &amp;lt;code&amp;gt;Particle&amp;lt;/code&amp;gt; is not beholden to any particular &amp;lt;code&amp;gt;ParticleType&amp;lt;?&amp;gt;&amp;lt;/code&amp;gt;, it can be reused over and over again in different factories if necessary.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; must be attached to a &amp;lt;code&amp;gt;ParticleType&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;ParticleManager#registerFactory&amp;lt;/code&amp;gt;. This should be called during &amp;lt;code&amp;gt;ParticleFactoryRegisterEvent&amp;lt;/code&amp;gt; on the mod event bus.&lt;br /&gt;
&lt;br /&gt;
{{Colored box|title=Important|content=&amp;lt;code&amp;gt;IParticleFactory&amp;lt;/code&amp;gt; is only present on the client, so the event needs to be isolated via &amp;lt;code&amp;gt;DistExecutor&amp;lt;/code&amp;gt; or some other method.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spawning Particles ==&lt;br /&gt;
Particles can be spawned from a world instance. Each side, however, has a specific way of calling them. The &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; can call either &amp;lt;code&amp;gt;addParticle&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;addOptionalParticle&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;ServerWorld&amp;lt;/code&amp;gt; must call &amp;lt;code&amp;gt;spawnParticle&amp;lt;/code&amp;gt; as it sends a packet to the client world to call one of the other two methods. Calling the two &amp;lt;code&amp;gt;ClientWorld&amp;lt;/code&amp;gt; methods on the server will result in nothing happening.&lt;/div&gt;</summary>
		<author><name>Unbekannt</name></author>
	</entry>
</feed>