Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ public class BedrockMappingData extends MappingDataBase {
private Map<String, Map<String, SoundDefinitions.ConfiguredSound>> bedrockLevelSoundEvents;
private Map<NoteBlockInstrument, String> bedrockNoteBlockInstrumentSounds;
private Map<String, JavaSound> bedrockToJavaSounds;
private Map<String, Map<String, JavaSound>> bedrockLevelSoundEventOverrides;
private Map<String, JavaParticle> bedrockToJavaParticles;
private Map<LevelEvent, LevelEventMapping> bedrockToJavaLevelEvents;
private Map<ParticleType, JavaParticle> bedrockToJavaLevelEventParticles;
Expand Down Expand Up @@ -857,6 +858,32 @@ public void load() {
}
}

final JsonObject soundEventOverridesJson = this.readJson("custom/sound_event_overrides.json");
this.bedrockLevelSoundEventOverrides = new HashMap<>(soundEventOverridesJson.size());
for (Map.Entry<String, JsonElement> eventEntry : soundEventOverridesJson.entrySet()) {
final String soundEvent = eventEntry.getKey();
final Map<String, SoundDefinitions.ConfiguredSound> eventSounds = this.bedrockLevelSoundEvents.get(soundEvent);
if (eventSounds == null) {
throw new IllegalStateException("Unknown bedrock level sound event: " + soundEvent);
}
final JsonObject overridesJson = eventEntry.getValue().getAsJsonObject();
final Map<String, JavaSound> overrides = new HashMap<>(overridesJson.size());
for (Map.Entry<String, JsonElement> overrideEntry : overridesJson.entrySet()) {
final String bedrockSound = overrideEntry.getKey();
if (eventSounds.values().stream().noneMatch(sound -> sound.sound().equals(bedrockSound))) {
throw new IllegalStateException("Sound " + bedrockSound + " is not used by level sound event " + soundEvent);
}
final String javaIdentifier = overrideEntry.getValue().getAsString();
final Integer javaSoundId = this.javaSounds.get(javaIdentifier);
if (javaSoundId == null) {
throw new IllegalStateException("Unknown java sound: " + javaIdentifier);
}
final JavaSound defaultSound = this.bedrockToJavaSounds.get(bedrockSound);
overrides.put(bedrockSound, new JavaSound(javaSoundId, javaIdentifier, defaultSound.category()));
}
this.bedrockLevelSoundEventOverrides.put(soundEvent, overrides);
}

final JsonArray bedrockParticlesJson = this.readJson("bedrock/particles.json", JsonArray.class);
final List<String> bedrockParticles = new ArrayList<>(bedrockParticlesJson.size());
for (JsonElement particleJson : bedrockParticlesJson) {
Expand Down Expand Up @@ -1366,6 +1393,17 @@ public Map<String, JavaSound> getBedrockToJavaSounds() {
return this.bedrockToJavaSounds;
}

public JavaSound getJavaSoundForLevelSoundEvent(final String soundEvent, final String bedrockSound) {
final Map<String, JavaSound> overrides = this.bedrockLevelSoundEventOverrides.get(soundEvent);
if (overrides != null) {
final JavaSound override = overrides.get(bedrockSound);
if (override != null) {
return override;
}
}
return this.bedrockToJavaSounds.get(bedrockSound);
}

public Map<String, JavaParticle> getBedrockToJavaParticles() {
return this.bedrockToJavaParticles;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ public static void register(final BedrockProtocol protocol) {
}
}
}
final BedrockMappingData.JavaSound javaSound = BedrockProtocol.MAPPINGS.getBedrockToJavaSounds().get(configuredSound.sound());
final BedrockMappingData.JavaSound javaSound = BedrockProtocol.MAPPINGS.getJavaSoundForLevelSoundEvent(soundEvent, configuredSound.sound());
if (javaSound == null) {
ViaBedrock.getPlatform().getLogger().log(Level.WARNING, "Unknown bedrock sound: " + configuredSound.sound());
wrapper.cancel();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"break": {
"place.tuff": "minecraft:block.tuff.break",
"place.tuff_bricks": "minecraft:block.tuff_bricks.break"
},
"button.click_off": {
"random.stone_click": "minecraft:block.stone_button.click_off",
"random.wood_click": "minecraft:block.wooden_button.click_off"
},
"power.off": {
"random.stone_click": "minecraft:block.stone_button.click_off",
"random.wood_click": "minecraft:block.wooden_button.click_off"
},
"trapdoor.close": {
"open_trapdoor.copper": "minecraft:block.copper_trapdoor.close"
}
}