Skip to content

Commit 96e367e

Browse files
committed
Add arrow particle color to entity_spec
1 parent 5004975 commit 96e367e

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCArrow.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.laytonsmith.abstraction.bukkit.entities;
22

33
import com.laytonsmith.PureUtilities.Common.ReflectionUtils;
4+
import com.laytonsmith.abstraction.MCColor;
45
import com.laytonsmith.abstraction.MCLivingEntity;
56
import com.laytonsmith.abstraction.MCPotionData;
7+
import com.laytonsmith.abstraction.bukkit.BukkitMCColor;
68
import com.laytonsmith.abstraction.bukkit.BukkitMCPotionData;
79
import com.laytonsmith.abstraction.entities.MCArrow;
810
import com.laytonsmith.abstraction.enums.MCPotionType;
911
import com.laytonsmith.abstraction.enums.MCVersion;
1012
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCPotionEffectType;
1113
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCPotionType;
1214
import com.laytonsmith.core.Static;
15+
import org.bukkit.Color;
1316
import org.bukkit.entity.AbstractArrow;
1417
import org.bukkit.entity.Arrow;
1518
import org.bukkit.entity.Entity;
@@ -137,4 +140,22 @@ public MCArrow.PickupStatus getPickupStatus() {
137140
public void setPickupStatus(MCArrow.PickupStatus status) {
138141
arrow.setPickupStatus(AbstractArrow.PickupStatus.valueOf(status.name()));
139142
}
143+
144+
@Override
145+
public MCColor getColor() {
146+
Color c = arrow.getColor();
147+
if(c == null) {
148+
return null;
149+
}
150+
return BukkitMCColor.GetMCColor(c);
151+
}
152+
153+
@Override
154+
public void setColor(MCColor color) {
155+
if(color == null) {
156+
arrow.setColor(null);
157+
} else {
158+
arrow.setColor(BukkitMCColor.GetColor(color));
159+
}
160+
}
140161
}

src/main/java/com/laytonsmith/abstraction/entities/MCArrow.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.laytonsmith.abstraction.entities;
22

3+
import com.laytonsmith.abstraction.MCColor;
34
import com.laytonsmith.abstraction.MCLivingEntity;
45
import com.laytonsmith.abstraction.MCPotionData;
56
import com.laytonsmith.abstraction.enums.MCPotionType;
@@ -42,6 +43,10 @@ public interface MCArrow extends MCProjectile {
4243

4344
void setPickupStatus(PickupStatus status);
4445

46+
MCColor getColor();
47+
48+
void setColor(MCColor color);
49+
4550
enum PickupStatus {
4651
ALLOWED,
4752
DISALLOWED,

src/main/java/com/laytonsmith/core/functions/EntityManagement.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,7 +1942,13 @@ public Mixed exec(Target t, Environment environment, Mixed... args) throws Confi
19421942
} else {
19431943
tippedmeta.set("base", ObjectGenerator.GetGenerator().potionData(arrow.getBasePotionData(), t), t);
19441944
}
1945-
specArray.set(entity_spec.KEY_TIPPEDARROW_POTIONMETA, tippedmeta, t);
1945+
specArray.set(entity_spec.KEY_ARROW_POTIONMETA, tippedmeta, t);
1946+
MCColor arrowColor = arrow.getColor();
1947+
if(arrowColor == null) {
1948+
specArray.set(entity_spec.KEY_ARROW_COLOR, CNull.NULL, t);
1949+
} else {
1950+
specArray.set(entity_spec.KEY_ARROW_COLOR, ObjectGenerator.GetGenerator().color(arrowColor, t), t);
1951+
}
19461952
break;
19471953
case ARMOR_STAND:
19481954
MCArmorStand stand = (MCArmorStand) entity;
@@ -2433,6 +2439,8 @@ public MSVersion since() {
24332439
private static final String KEY_ARROW_DAMAGE = "damage";
24342440
private static final String KEY_ARROW_PIERCE_LEVEL = "piercelevel";
24352441
private static final String KEY_ARROW_PICKUP = "pickup";
2442+
private static final String KEY_ARROW_POTIONMETA = "potionmeta";
2443+
private static final String KEY_ARROW_COLOR = "color";
24362444
private static final String KEY_ARMORSTAND_ARMS = "arms";
24372445
private static final String KEY_ARMORSTAND_BASEPLATE = "baseplate";
24382446
private static final String KEY_ARMORSTAND_GRAVITY = "gravity";
@@ -2542,7 +2550,6 @@ public MSVersion since() {
25422550
private static final String KEY_SPECTRAL_ARROW_GLOWING_TICKS = "glowingticks";
25432551
private static final String KEY_SPLASH_POTION_ITEM = "item";
25442552
private static final String KEY_STEERABLE_SADDLED = "saddled";
2545-
private static final String KEY_TIPPEDARROW_POTIONMETA = "potionmeta";
25462553
private static final String KEY_TROPICALFISH_COLOR = "color";
25472554
private static final String KEY_TROPICALFISH_PATTERN = "pattern";
25482555
private static final String KEY_TROPICALFISH_PATTERNCOLOR = "patterncolor";
@@ -2747,7 +2754,7 @@ public Mixed exec(Target t, Environment environment, Mixed... args) throws Confi
27472754
+ specArray.get(index, t).val(), t);
27482755
}
27492756
break;
2750-
case entity_spec.KEY_TIPPEDARROW_POTIONMETA:
2757+
case entity_spec.KEY_ARROW_POTIONMETA:
27512758
Mixed c = specArray.get(index, t);
27522759
if(c.isInstanceOf(CArray.TYPE)) {
27532760
CArray meta = (CArray) c;
@@ -2782,7 +2789,18 @@ public Mixed exec(Target t, Environment environment, Mixed... args) throws Confi
27822789
}
27832790
}
27842791
} else {
2785-
throw new CRECastException("TippedArrow potion meta must be an array", t);
2792+
throw new CRECastException("Arrow potion meta must be an array", t);
2793+
}
2794+
break;
2795+
case entity_spec.KEY_ARROW_COLOR:
2796+
Mixed colorMixed = specArray.get(index, t);
2797+
if(colorMixed instanceof CNull) {
2798+
arrow.setColor(null);
2799+
} else if(colorMixed.isInstanceOf(CArray.TYPE)) {
2800+
CArray color = (CArray) colorMixed;
2801+
arrow.setColor(ObjectGenerator.GetGenerator().color(color, t));
2802+
} else {
2803+
throw new CRECastException("Arrow color must be an array", t);
27862804
}
27872805
break;
27882806
default:

src/main/resources/functionDocs/entity_spec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ Can also accept a particle array for specific particle data. See spawn_particle(
2727
* %KEY_ARROW_DAMAGE%: The amount of damage. (double)
2828
* %KEY_ARROW_PIERCE_LEVEL%: The remaining times that this arrow can pierce through an entity. (int from 0 and 127)
2929
* %KEY_ARROW_PICKUP%: Whether picking up this arrow is ALLOWED, DISALLOWED, or CREATIVE_ONLY.
30-
* %KEY_TIPPEDARROW_POTIONMETA%: An associative array of potion item meta for a tipped arrow.
30+
* %KEY_ARROW_POTIONMETA%: An associative array of potion item meta for a tipped arrow.
31+
* %KEY_ARROW_COLOR%: Overrides the color of the arrow potion particles. Must be a color array or null.
3132
|-
3233
| ARMOR_STAND
3334
|

0 commit comments

Comments
 (0)