Skip to content

Commit 7a7cb4d

Browse files
committed
Allow setting custom update speeds
1 parent 5c9efff commit 7a7cb4d

9 files changed

Lines changed: 25 additions & 12 deletions

File tree

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
</a>
3838
</div>
3939

40-
This is a library that allows users use blockbench particle files in **Vanilla Minecraft**!
41-
4240
With this library, you can design particle animations with [snowstorm](https://snowstorm.app/) and draw them in a Minecraft world.
4341

4442
Currently only [Minestom](https://github.com/Minestom/Minestom) is supported.

src/main/java/emitters/lifetime/EmitterLifetimeLooping.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ public static EmitterLifetime parse(JsonObject asJsonObject) throws InvocationTa
3535
public LifetimeState getState(ParticleInterface i) {
3636
if (waitTicks <= 0) {
3737
if (active) {
38-
waitTicks = (int) (2000 * sleepTime.evaluate(i));
38+
waitTicks = (int) (i.updatesPerSecond() * sleepTime.evaluate(i));
3939
active = false;
4040
return LifetimeState.INACTIVE;
4141
} else {
42-
waitTicks = (int) (2000 * activeTime.evaluate(i));
42+
waitTicks = (int) (i.updatesPerSecond() * activeTime.evaluate(i));
4343
active = true;
4444
i.reset();
4545
return LifetimeState.ALIVE;

src/main/java/emitters/rate/EmitterRateSteady.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static EmitterRate parse(JsonObject asJsonObject) throws InvocationTarget
3333
@Override
3434
public boolean canEmit(ParticleInterface emitter) {
3535
if (waitTicks <= 0) {
36-
waitTicks = (int) (2000 / spawnRate.evaluate(emitter));
36+
waitTicks = (int) (emitter.updatesPerSecond() / spawnRate.evaluate(emitter));
3737
return emitter.particle_count() < maxParticles.evaluate(emitter);
3838
} else {
3939
waitTicks--;

src/main/java/runtime/Parser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.lang.reflect.InvocationTargetException;
2121

2222
public class Parser {
23-
public static ParticleEmitter parse(JsonObject description) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
23+
public static ParticleEmitter parse(int updatesPerSecond, JsonObject description) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
2424
String version = description.get("format_version").getAsString();
2525
JsonObject particleEffect = description.get("particle_effect").getAsJsonObject();
2626
JsonObject components = particleEffect.get("components").getAsJsonObject();
@@ -84,6 +84,7 @@ public static ParticleEmitter parse(JsonObject description) throws InvocationTar
8484
JsonObject particleLifetimeExpression = components.get("minecraft:particle_lifetime_expression").getAsJsonObject();
8585

8686
return new ParticleEmitter(
87+
updatesPerSecond,
8788
EmitterInitialization.parse(emitterInitialization),
8889
EmitterLocalSpace.parse(emitterLocalSpace),
8990
lifetime, rate, shape,

src/main/java/runtime/Particle.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public void reset() {
5959
particle_age = 0;
6060
}
6161

62+
@Override
63+
public int updatesPerSecond() {
64+
return emitter.updatesPerSecond();
65+
}
66+
6267
@Query
6368
public double emitter_age() {
6469
return emitter.emitter_age();
@@ -121,7 +126,7 @@ public ParticlePacket draw(Vec start, Vec direction) throws InvocationTargetExce
121126
}
122127

123128
public void tick() {
124-
particle_age += 1 / 2000.0;
129+
particle_age += 1.0 / updatesPerSecond();
125130
}
126131

127132
public boolean isAlive() {

src/main/java/runtime/ParticleEmitter.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
public class ParticleEmitter extends ParticleInterface {
2222
private Set<Particle> particles = new HashSet<>();
23+
private final int updatesPerSecond;
2324

2425
private double emitter_age;
2526
private final double emitter_random_1;
@@ -88,7 +89,7 @@ public void setPosition(Vec offset) {
8889
this.offset = offset;
8990
}
9091

91-
public ParticleEmitter(EmitterInitialization initialization, EmitterLocalSpace local_space,
92+
public ParticleEmitter(int updatesPerSecond, EmitterInitialization initialization, EmitterLocalSpace local_space,
9293
EmitterLifetime lifetime, EmitterRate rate, EmitterShape shape,
9394
ParticleInitialSpeed particleSpeed, ParticleAppearanceTinting particleColour, ParticleLifetime particleLifetime) {
9495
this.emitter_age = 0;
@@ -108,6 +109,8 @@ public ParticleEmitter(EmitterInitialization initialization, EmitterLocalSpace l
108109
this.particleColour = particleColour;
109110
this.particleLifetime = particleLifetime;
110111

112+
this.updatesPerSecond = updatesPerSecond;
113+
111114
initialization.initialize(this);
112115
}
113116

@@ -117,8 +120,13 @@ public void reset() {
117120
initialization.initialize(this);
118121
}
119122

123+
@Override
124+
public int updatesPerSecond() {
125+
return updatesPerSecond;
126+
}
127+
120128
public Collection<ParticlePacket> tick() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
121-
emitter_age += 1.0/2000;
129+
emitter_age += 1.0/updatesPerSecond;
122130

123131
initialization.update(this);
124132
// particles.forEach(Particle::tick);

src/main/java/runtime/ParticleInterface.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ public abstract class ParticleInterface {
2727
abstract public int particle_count();
2828

2929
public abstract void reset();
30+
public abstract int updatesPerSecond();
3031
}

src/test/java/Demo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static void main(String[] args) throws FileNotFoundException, Unsupported
4141
FileInputStream fis = new FileInputStream(file);
4242
JsonReader reader = new JsonReader(new InputStreamReader(fis, "UTF-8"));
4343
JsonObject map = GSON.fromJson(reader, JsonObject.class);
44-
emitters.add(Parser.parse(map));
44+
emitters.add(Parser.parse(2000, map));
4545
}
4646

4747
// Add an event callback to specify the spawning instance (and the spawn position)

src/test/java/ParserTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void parseMagic() throws IOException, InvocationTargetException, NoSuchMe
2222
FileInputStream fis = new FileInputStream(file);
2323
JsonReader reader = new JsonReader(new InputStreamReader(fis, "UTF-8"));
2424
JsonObject map = GSON.fromJson(reader, JsonObject.class);
25-
ParticleEmitter emitter = Parser.parse(map);
25+
ParticleEmitter emitter = Parser.parse(1000, map);
2626
}
2727

2828
@Test
@@ -31,6 +31,6 @@ public void parseLoading() throws IOException, InvocationTargetException, NoSuch
3131
FileInputStream fis = new FileInputStream(file);
3232
JsonReader reader = new JsonReader(new InputStreamReader(fis, "UTF-8"));
3333
JsonObject map = GSON.fromJson(reader, JsonObject.class);
34-
ParticleEmitter emitter = Parser.parse(map);
34+
ParticleEmitter emitter = Parser.parse(1000, map);
3535
}
3636
}

0 commit comments

Comments
 (0)