Skip to content

Commit

Permalink
Convert Particles from the Old Syntax to the New Syntax internally
Browse files Browse the repository at this point in the history
  • Loading branch information
UnlikePaladin committed Sep 20, 2024
1 parent 44da2c5 commit 8f3ade9
Showing 1 changed file with 136 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import org.figuramc.figura.utils.LuaUtils;
import org.luaj.vm2.LuaError;

import java.util.Objects;

@LuaWhitelist
@LuaTypeDoc(
name = "ParticleAPI",
Expand All @@ -39,6 +41,7 @@ public static ParticleEngineAccessor getParticleEngine() {

private LuaParticle generate(String id, double x, double y, double z, double w, double t, double h) {
try {
id = convertOldToNewParticleFormat(id);
ParticleOptions options = ParticleArgument.readParticle(new StringReader(id), WorldAPI.getCurrentWorld().registryAccess());
Particle p = getParticleEngine().figura$makeParticle(options, x, y, z, w, t, h);
if (p == null) throw new LuaError("Could not parse particle \"" + id + "\"");
Expand All @@ -48,6 +51,139 @@ private LuaParticle generate(String id, double x, double y, double z, double w,
}
}

private String convertOldToNewParticleFormat(String id) {
if (id.contains("block ")) {
id = id.replaceFirst("minecraft:", "");
String blockPart = id.split("block ")[1];
String ret = "block{block_state:{";
String blockName;

if (blockPart.contains("[")) {
blockName = blockPart.split("\\[")[0];
String properties = id.substring(id.indexOf("[")+1, id.indexOf("]")+1);
properties = properties.replaceAll("=", ":\"").replaceAll(",", "\",").replace("]", "\"");
ret += ("Name:" + blockName + ",Properties:{" + properties + "}");
} else {
blockName = blockPart;
ret += ("Name:" + blockName);
}

ret += "}}";
id = ret;
} else if (id.contains("block_marker ")) {
id = id.replaceFirst("minecraft:", "");
String blockPart = id.split("block_marker ")[1];
String ret = "block_marker{block_state:{";
String blockName;

if (blockPart.contains("[")) {
blockName = blockPart.split("\\[")[0];
String properties = id.substring(id.indexOf("[")+1, id.indexOf("]")+1);
properties = properties.replaceAll("=", ":\"").replaceAll(",", "\",").replace("]", "\"");
ret += ("Name:" + blockName + ",Properties:{" + properties + "}");
} else {
blockName = blockPart;
ret += ("Name:" + blockName);
}

ret += "}}";
id = ret;
} else if (id.contains("falling_dust ")) {
id = id.replaceFirst("minecraft:", "");
String blockPart = id.split("falling_dust ")[1];
String ret = "falling_dust{block_state:{";
String blockName;

if (blockPart.contains("[")) {
blockName = blockPart.split("\\[")[0];
String properties = id.substring(id.indexOf("[")+1, id.indexOf("]")+1);
properties = properties.replaceAll("=", ":\"").replaceAll(",", "\",").replace("]", "\"");
ret += ("Name:" + blockName + ",Properties:{" + properties + "}");
} else {
blockName = blockPart;
ret += ("Name:" + blockName);
}

ret += "}}";
id = ret;
} else if (id.contains("dust ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "dust{";
if (Objects.equals(parts[0], "dust")) {
String num1 = parts[1];
String num2 = parts[2];
String num3 = parts[3];
ret += ("color:[" + num1 + "," + num2 + "," + num3+ "],scale:"+parts[4]+"}");
}

ret += "}";
id = ret;
} else if (id.contains("dust_color_transition ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "dust_color_transition{";
if (Objects.equals(parts[0], "dust_color_transition")) {
String rFrom = parts[1];
String gFrom = parts[2];
String bFrom = parts[3];
String scale = parts[4];
String rTo = parts[5];
String gTo = parts[6];
String bTo = parts[7];
ret += ("from_color:[" + rFrom + "," + gFrom + "," + bFrom + "],scale:"+scale+",to_color:["+rTo + "," + gTo + "," + bTo + "]");
}
ret += "}";
id = ret;
} else if (id.contains("item ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "item{";
if (Objects.equals(parts[0], "item")) {
String itemId = parts[1];
ret += ("item:{id:"+itemId+"}");
}
ret += "}";
id = ret;
} else if (id.contains("sculk_charge ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "sculk_charge{";
if (Objects.equals(parts[0], "sculk_charge")) {
String roll = parts[1];
ret += ("roll:"+roll);
}
ret += "}";
id = ret;
} else if (id.contains("shriek ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "shriek{";
if (Objects.equals(parts[0], "shriek ")) {
String delay = parts[1];
ret += ("delay:"+delay);
}
ret += "}";
id = ret;
} else if (id.contains("vibration ")) {
id = id.replaceFirst("minecraft:", "");
String[] parts = id.split(" ");
String ret = "vibration{";
if (Objects.equals(parts[0], "vibration")) {
String dsX = parts[1];
String dsY = parts[2];
String dsZ = parts[3];
String arr = parts[4];
ret += ("arrival_in_ticks:"+arr+",destination:{type:block,pos:["+dsX+","+dsY+","+dsZ+"]}");
}
ret += "}";
id = ret;
} else if (id.contains("entity_effect") && !id.contains("{")) {
id += "{color:[0.0,0.0,0.0,1.0]}";
}
return id;
}

@LuaWhitelist
@LuaMethodDoc(
overloads = {
Expand Down

0 comments on commit 8f3ade9

Please sign in to comment.