Skip to content

Commit 0c8aa27

Browse files
AbsolutionismEfnilitesovdeeth
authored
Fireworks Fix (#7131)
* Starter Commit * Fix Test * Cleanup * Fix Test for older versions * Requested Changes * Sovde Changes * Fixed RGB * Efy's Space * Remove License * Fuze Fix --------- Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>
1 parent 3907549 commit 0c8aa27

File tree

6 files changed

+134
-57
lines changed

6 files changed

+134
-57
lines changed

src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
import ch.njol.skript.util.EnchantmentType;
4343
import ch.njol.skript.util.Getter;
4444
import ch.njol.skript.util.Timespan;
45+
import ch.njol.skript.util.Color;
46+
import ch.njol.skript.util.SkriptColor;
47+
import ch.njol.skript.util.ColorRGB;
4548
import ch.njol.skript.util.slot.InventorySlot;
4649
import ch.njol.skript.util.slot.Slot;
4750
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
@@ -1638,6 +1641,26 @@ public FireworkEffect get(FireworkExplodeEvent e) {
16381641
return effects.get(0);
16391642
}
16401643
}, 0);
1644+
EventValues.registerEventValue(FireworkExplodeEvent.class, Color[].class, new Getter<Color[], FireworkExplodeEvent>() {
1645+
@Override
1646+
public Color @Nullable [] get(FireworkExplodeEvent event) {
1647+
List<FireworkEffect> effects = event.getEntity().getFireworkMeta().getEffects();
1648+
if (effects.isEmpty())
1649+
return null;
1650+
List<Color> colors = new ArrayList<>();
1651+
for (FireworkEffect fireworkEffect : effects) {
1652+
for (org.bukkit.Color color : fireworkEffect.getColors()) {
1653+
if (SkriptColor.fromBukkitColor(color) != null)
1654+
colors.add(SkriptColor.fromBukkitColor(color));
1655+
else
1656+
colors.add(ColorRGB.fromBukkitColor(color));
1657+
}
1658+
}
1659+
if (colors.isEmpty())
1660+
return null;
1661+
return colors.toArray(Color[]::new);
1662+
}
1663+
}, EventValues.TIME_NOW);
16411664
//PlayerRiptideEvent
16421665
EventValues.registerEventValue(PlayerRiptideEvent.class, ItemStack.class, new Getter<ItemStack, PlayerRiptideEvent>() {
16431666
@Override

src/main/java/ch/njol/skript/events/EvtFirework.java

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
1-
/**
2-
* This file is part of Skript.
3-
*
4-
* Skript is free software: you can redistribute it and/or modify
5-
* it under the terms of the GNU General Public License as published by
6-
* the Free Software Foundation, either version 3 of the License, or
7-
* (at your option) any later version.
8-
*
9-
* Skript is distributed in the hope that it will be useful,
10-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12-
* GNU General Public License for more details.
13-
*
14-
* You should have received a copy of the GNU General Public License
15-
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
16-
*
17-
* Copyright Peter Güttinger, SkriptLang team and contributors
18-
*/
191
package ch.njol.skript.events;
202

213
import ch.njol.skript.Skript;
@@ -25,8 +7,8 @@
257
import ch.njol.skript.util.Color;
268
import java.util.Arrays;
279
import java.util.List;
28-
import java.util.stream.Collectors;
2910

11+
import ch.njol.skript.util.ColorRGB;
3012
import org.bukkit.FireworkEffect;
3113
import org.bukkit.event.Event;
3214
import org.bukkit.event.entity.FireworkExplodeEvent;
@@ -41,15 +23,15 @@ public class EvtFirework extends SkriptEvent {
4123
//Making the event argument type fireworkeffects, led to Skript having troubles parsing for some reason.
4224
Skript.registerEvent("Firework Explode", EvtFirework.class, FireworkExplodeEvent.class, "[a] firework explo(d(e|ing)|sion) [colo[u]red %-colors%]")
4325
.description("Called when a firework explodes.")
44-
.examples("on firework explode",
45-
"on firework exploding colored red, light green and black",
46-
"on firework explosion colored light green:",
47-
" broadcast \"A firework colored %colors% was exploded at %location%!\"")//TODO fix
26+
.examples("on firework explode:",
27+
"\tif event-colors contains red:",
28+
"on firework exploding colored red, light green and black:",
29+
"on firework explosion colored rgb 0, 255, 0:",
30+
"\tbroadcast \"A firework colored %colors% was exploded at %location%!\"")
4831
.since("2.4");
4932
}
50-
51-
@Nullable
52-
private Literal<Color> colors;
33+
34+
private @Nullable Literal<Color> colors;
5335

5436
@SuppressWarnings("unchecked")
5537
@Override
@@ -58,16 +40,23 @@ public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResu
5840
colors = (Literal<Color>) args[0];
5941
return true;
6042
}
61-
62-
@SuppressWarnings("null")
43+
6344
@Override
64-
public boolean check(Event e) {
45+
public boolean check(Event event) {
46+
if (!(event instanceof FireworkExplodeEvent fireworkExplodeEvent))
47+
return false;
48+
6549
if (colors == null)
6650
return true;
67-
List<org.bukkit.Color> colours = Arrays.stream(colors.getArray(e))
68-
.map(color -> color.asBukkitColor())
69-
.collect(Collectors.toList());
70-
FireworkMeta meta = ((FireworkExplodeEvent)e).getEntity().getFireworkMeta();
51+
52+
List<org.bukkit.Color> colours = colors.stream(event)
53+
.map(color -> {
54+
if (color instanceof ColorRGB)
55+
return color.asBukkitColor();
56+
return color.asDyeColor().getFireworkColor();
57+
})
58+
.toList();
59+
FireworkMeta meta = fireworkExplodeEvent.getEntity().getFireworkMeta();
7160
for (FireworkEffect effect : meta.getEffects()) {
7261
if (colours.containsAll(effect.getColors()))
7362
return true;

src/main/java/ch/njol/skript/expressions/ExprFireworkEffect.java

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,6 @@
1-
/**
2-
* This file is part of Skript.
3-
*
4-
* Skript is free software: you can redistribute it and/or modify
5-
* it under the terms of the GNU General Public License as published by
6-
* the Free Software Foundation, either version 3 of the License, or
7-
* (at your option) any later version.
8-
*
9-
* Skript is distributed in the hope that it will be useful,
10-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12-
* GNU General Public License for more details.
13-
*
14-
* You should have received a copy of the GNU General Public License
15-
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
16-
*
17-
* Copyright Peter Güttinger, SkriptLang team and contributors
18-
*/
191
package ch.njol.skript.expressions;
202

3+
import ch.njol.skript.util.ColorRGB;
214
import org.bukkit.FireworkEffect;
225
import org.bukkit.event.Event;
236
import org.jetbrains.annotations.Nullable;
@@ -86,11 +69,19 @@ protected FireworkEffect[] get(Event e) {
8669
return null;
8770
FireworkEffect.Builder builder = FireworkEffect.builder().with(type);
8871

89-
for (Color colour : color.getArray(e))
90-
builder.withColor(colour.asBukkitColor());
72+
for (Color colour : color.getArray(e)) {
73+
if (colour instanceof ColorRGB)
74+
builder.withColor(colour.asBukkitColor());
75+
else
76+
builder.withColor(colour.asDyeColor().getFireworkColor());
77+
}
9178
if (hasFade)
92-
for (Color colour : fade.getArray(e))
93-
builder.withFade(colour.asBukkitColor());
79+
for (Color colour : fade.getArray(e)) {
80+
if (colour instanceof ColorRGB)
81+
builder.withFade(colour.asBukkitColor());
82+
else
83+
builder.withFade(colour.asDyeColor().getFireworkColor());
84+
}
9485

9586
builder.flicker(flicker);
9687
builder.trail(trail);

src/main/java/ch/njol/skript/util/SkriptColor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,9 @@ public static SkriptColor fromDyeColor(DyeColor dye) {
193193

194194
public static SkriptColor fromBukkitColor(org.bukkit.Color color) {
195195
for (SkriptColor c : colors) {
196-
if (c.asBukkitColor().equals(color))
196+
if (c.asBukkitColor().equals(color) || c.asDyeColor().getFireworkColor().equals(color))
197197
return c;
198198
}
199-
assert false;
200199
return null;
201200
}
202201

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.skriptlang.skript.test.tests.syntaxes.events;
2+
3+
import ch.njol.skript.Skript;
4+
import ch.njol.skript.test.runner.SkriptJUnitTest;
5+
import ch.njol.skript.util.SkriptColor;
6+
import org.bukkit.Bukkit;
7+
import org.bukkit.FireworkEffect;
8+
import org.bukkit.entity.EntityType;
9+
import org.bukkit.entity.Firework;
10+
import org.bukkit.event.Event;
11+
import org.bukkit.event.entity.FireworkExplodeEvent;
12+
import org.bukkit.inventory.meta.FireworkMeta;
13+
import org.junit.After;
14+
import org.junit.Before;
15+
import org.junit.Test;
16+
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
20+
public class EvtFireworkTest extends SkriptJUnitTest {
21+
22+
private EntityType entityType;
23+
private List<Firework> fireworkList = new ArrayList<>();
24+
25+
@Before
26+
public void getEntity() {
27+
if (Skript.isRunningMinecraft(1, 20, 5)) {
28+
entityType = EntityType.FIREWORK_ROCKET;
29+
} else {
30+
entityType = EntityType.valueOf("FIREWORK");
31+
}
32+
}
33+
34+
@Test
35+
public void callEvents() {
36+
List<Event> events = new ArrayList<>();
37+
for (SkriptColor color : SkriptColor.values()) {
38+
Firework firework = (Firework) getTestWorld().spawnEntity(getTestLocation(), entityType);
39+
FireworkEffect fireworkEffect = FireworkEffect.builder().withColor(color.asDyeColor().getFireworkColor()).build();
40+
FireworkMeta fireworkMeta = firework.getFireworkMeta();
41+
fireworkMeta.addEffects(fireworkEffect);
42+
firework.setFireworkMeta(fireworkMeta);
43+
fireworkList.add(firework);
44+
events.add(new FireworkExplodeEvent(firework));
45+
}
46+
47+
for (Event event : events) {
48+
Bukkit.getPluginManager().callEvent(event);
49+
}
50+
}
51+
52+
@After
53+
public void cleanUp() {
54+
for (Firework firework : fireworkList) {
55+
firework.remove();
56+
}
57+
}
58+
59+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
options:
2+
EvtFireworkTest: "org.skriptlang.skript.test.tests.syntaxes.events.EvtFireworkTest"
3+
4+
test "EvtFireworkJUnit" when running JUnit:
5+
set {_tests::1} to "any firework"
6+
loop all colors:
7+
set {_tests::%loop-iteration + 1%} to "%loop-color% firework"
8+
9+
ensure junit test {@EvtFireworkTest} completes {_tests::*}
10+
11+
on firework explode:
12+
junit test is {@EvtFireworkTest}
13+
complete objective "any firework" for {@EvtFireworkTest}
14+
if event-colors is set:
15+
set {_color} to first element of event-colors
16+
complete objective "%{_color}% firework" for {@EvtFireworkTest}

0 commit comments

Comments
 (0)