forked from GeyserMC/Geyser
Add visual support for signs colored with dye (#1180)
* Fix dyed signs in Bedrock Edition Add visual support (in Bedrock Edition) for signs colored with dye (in Java Edition) * Javadoc for getBedrockSignColor(string) * Simplified getBedrockSignColor(string)
This commit is contained in:
parent
713085adf2
commit
2d6264d7c1
1 changed files with 67 additions and 0 deletions
|
@ -51,6 +51,11 @@ public class SignBlockEntityTranslator extends BlockEntityTranslator {
|
||||||
signLine = signLine.substring(0, 14);
|
signLine = signLine.substring(0, 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Java Edition 1.14 added the ability to change the text color of the whole sign using dye
|
||||||
|
if (tag.contains("Color")) {
|
||||||
|
signText.append(getBedrockSignColor(tag.get("Color").getValue().toString()));
|
||||||
|
}
|
||||||
|
|
||||||
signText.append(signLine);
|
signText.append(signLine);
|
||||||
signText.append("\n");
|
signText.append("\n");
|
||||||
}
|
}
|
||||||
|
@ -75,4 +80,66 @@ public class SignBlockEntityTranslator extends BlockEntityTranslator {
|
||||||
.putString("Text", "")
|
.putString("Text", "")
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps a color stored in a sign's Color tag to a Bedrock Edition formatting code.
|
||||||
|
* <br>
|
||||||
|
* The color names correspond to dye names, because of this we can't use {@link MessageUtils#getColor(String)}.
|
||||||
|
*
|
||||||
|
* @param javaColor The dye color stored in the sign's Color tag.
|
||||||
|
* @return A Bedrock Edition formatting code for valid dye colors, otherwise an empty string.
|
||||||
|
*/
|
||||||
|
private static String getBedrockSignColor(String javaColor) {
|
||||||
|
String base = "\u00a7";
|
||||||
|
switch (javaColor) {
|
||||||
|
case "white":
|
||||||
|
base += 'f';
|
||||||
|
break;
|
||||||
|
case "orange":
|
||||||
|
base += '6';
|
||||||
|
break;
|
||||||
|
case "magenta":
|
||||||
|
case "purple":
|
||||||
|
base += '5';
|
||||||
|
break;
|
||||||
|
case "light_blue":
|
||||||
|
base += 'b';
|
||||||
|
break;
|
||||||
|
case "yellow":
|
||||||
|
base += 'e';
|
||||||
|
break;
|
||||||
|
case "lime":
|
||||||
|
base += 'a';
|
||||||
|
break;
|
||||||
|
case "pink":
|
||||||
|
base += 'd';
|
||||||
|
break;
|
||||||
|
case "gray":
|
||||||
|
base += '8';
|
||||||
|
break;
|
||||||
|
case "light_gray":
|
||||||
|
base += '7';
|
||||||
|
break;
|
||||||
|
case "cyan":
|
||||||
|
base += '3';
|
||||||
|
break;
|
||||||
|
case "blue":
|
||||||
|
base += '9';
|
||||||
|
break;
|
||||||
|
case "brown": // Brown does not have a bedrock counterpart.
|
||||||
|
case "red": // In Java Edition light red (&c) can only be applied using commands. Red dye gives &4.
|
||||||
|
base += '4';
|
||||||
|
break;
|
||||||
|
case "green":
|
||||||
|
base += '2';
|
||||||
|
break;
|
||||||
|
case "black":
|
||||||
|
base += '0';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue