added mixer option and defaulted sounds to master. Fixes #201
This commit is contained in:
1 parent
2a1d5542f1
commit
07b3029820
3 files changed
+23
-7
No files matched your search
@@ -2932,10 +2932,13 @@ Collection of other methods that control smaller, yet still important aspects of
|
|||||||
|
|
||||||
## Sounds
|
## Sounds
|
||||||
|
|
||||||
### `sound(name, pos, volume?, pitch?)`
|
### `sound(name, pos, volume?, pitch?, mixer?)`
|
||||||
|
|
||||||
Plays a specific sound `name`, at block or position `pos`, with optional `volume` and modified `pitch`. `pos` can be
|
Plays a specific sound `name`, at block or position `pos`, with optional `volume` and modified `pitch`, and under
|
||||||
either a block, triple of coords, or a list of thee numbers. Uses the same options as a corresponding `playsound` command.
|
optional `mixer`. Default values for `volume`, `pitch` and `mixer` are `1.0`, `1.0`, and `master`.
|
||||||
|
Valid mixer options are `master`, `music`, `record`, `weather`, `block`, `hostile`,`neutral`, `player`, `ambient`
|
||||||
|
and `voice`. `pos` can be either a block, triple of coords, or a list of thee numbers. Uses the same options as a
|
||||||
|
corresponding `playsound` command.
|
||||||
|
|
||||||
## Particles
|
## Particles
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ Collection of other methods that control smaller, yet still important aspects of
|
|||||||
|
|
||||||
## Sounds
|
## Sounds
|
||||||
|
|
||||||
### `sound(name, pos, volume?, pitch?)`
|
### `sound(name, pos, volume?, pitch?, mixer?)`
|
||||||
|
|
||||||
Plays a specific sound `name`, at block or position `pos`, with optional `volume` and modified `pitch`. `pos` can be
|
Plays a specific sound `name`, at block or position `pos`, with optional `volume` and modified `pitch`, and under
|
||||||
either a block, triple of coords, or a list of thee numbers. Uses the same options as a corresponding `playsound` command.
|
optional `mixer`. Default values for `volume`, `pitch` and `mixer` are `1.0`, `1.0`, and `master`.
|
||||||
|
Valid mixer options are `master`, `music`, `record`, `weather`, `block`, `hostile`,`neutral`, `player`, `ambient`
|
||||||
|
and `voice`. `pos` can be either a block, triple of coords, or a list of thee numbers. Uses the same options as a
|
||||||
|
corresponding `playsound` command.
|
||||||
|
|
||||||
## Particles
|
## Particles
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ import java.util.Optional;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collector;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static carpet.script.utils.WorldTools.canHasChunk;
|
import static carpet.script.utils.WorldTools.canHasChunk;
|
||||||
@@ -2378,6 +2379,8 @@ public class CarpetExpression
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<String,SoundCategory> mixerMap = Arrays.stream(SoundCategory.values()).collect(Collectors.toMap(SoundCategory::getName, k -> k));
|
||||||
|
|
||||||
private void API_AuxiliaryAspects()
|
private void API_AuxiliaryAspects()
|
||||||
{
|
{
|
||||||
this.expr.addLazyFunction("sound", -1, (c, t, lv) -> {
|
this.expr.addLazyFunction("sound", -1, (c, t, lv) -> {
|
||||||
@@ -2388,12 +2391,19 @@ public class CarpetExpression
|
|||||||
throw new InternalExpressionException("No such sound: "+soundName.getPath());
|
throw new InternalExpressionException("No such sound: "+soundName.getPath());
|
||||||
float volume = 1.0F;
|
float volume = 1.0F;
|
||||||
float pitch = 1.0F;
|
float pitch = 1.0F;
|
||||||
|
SoundCategory mixer = SoundCategory.MASTER;
|
||||||
if (lv.size() > 0+locator.offset)
|
if (lv.size() > 0+locator.offset)
|
||||||
{
|
{
|
||||||
volume = (float) NumericValue.asNumber(lv.get(0+locator.offset).evalValue(c)).getDouble();
|
volume = (float) NumericValue.asNumber(lv.get(0+locator.offset).evalValue(c)).getDouble();
|
||||||
if (lv.size() > 1+locator.offset)
|
if (lv.size() > 1+locator.offset)
|
||||||
{
|
{
|
||||||
pitch = (float) NumericValue.asNumber(lv.get(1+locator.offset).evalValue(c)).getDouble();
|
pitch = (float) NumericValue.asNumber(lv.get(1+locator.offset).evalValue(c)).getDouble();
|
||||||
|
if (lv.size() > 2+locator.offset)
|
||||||
|
{
|
||||||
|
String mixerName = lv.get(2+locator.offset).evalValue(c).getString();
|
||||||
|
mixer = mixerMap.get(mixerName.toLowerCase(Locale.ROOT));
|
||||||
|
if (mixer == null) throw new InternalExpressionException(mixerName +" is not a valid mixer name");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Vec3d vec = locator.vec;
|
Vec3d vec = locator.vec;
|
||||||
@@ -2402,7 +2412,7 @@ public class CarpetExpression
|
|||||||
for (ServerPlayerEntity player : cc.s.getWorld().getPlayers( (p) -> p.squaredDistanceTo(vec) < d0))
|
for (ServerPlayerEntity player : cc.s.getWorld().getPlayers( (p) -> p.squaredDistanceTo(vec) < d0))
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
player.networkHandler.sendPacket(new PlaySoundIdS2CPacket(soundName, SoundCategory.PLAYERS, vec, volume, pitch));
|
player.networkHandler.sendPacket(new PlaySoundIdS2CPacket(soundName, mixer, vec, volume, pitch));
|
||||||
}
|
}
|
||||||
int totalPlayed = count;
|
int totalPlayed = count;
|
||||||
return (_c, _t) -> new NumericValue(totalPlayed);
|
return (_c, _t) -> new NumericValue(totalPlayed);
|
||||||
|
|||||||
Reference in new issue
Block a user