soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.server.commands;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.FloatArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.EntityArgument;
import net.minecraft.commands.arguments.ResourceLocationArgument;
import net.minecraft.commands.arguments.coordinates.Vec3Argument;
import net.minecraft.commands.synchronization.SuggestionProviders;
import net.minecraft.core.Holder;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundSoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3;
public class PlaySoundCommand {
private static final SimpleCommandExceptionType ERROR_TOO_FAR = new SimpleCommandExceptionType(Component.translatable("commands.playsound.failed"));
public static void register(CommandDispatcher<CommandSourceStack> p_138157_) {
RequiredArgumentBuilder<CommandSourceStack, ResourceLocation> requiredargumentbuilder = Commands.argument("sound", ResourceLocationArgument.id())
.suggests(SuggestionProviders.AVAILABLE_SOUNDS)
.executes(
p_326320_ -> playSound(
p_326320_.getSource(),
getCallingPlayerAsCollection(p_326320_.getSource().getPlayer()),
ResourceLocationArgument.getId(p_326320_, "sound"),
SoundSource.MASTER,
p_326320_.getSource().getPosition(),
1.0F,
1.0F,
0.0F
)
);
for (SoundSource soundsource : SoundSource.values()) {
requiredargumentbuilder.then(source(soundsource));
}
p_138157_.register(Commands.literal("playsound").requires(p_138159_ -> p_138159_.hasPermission(2)).then(requiredargumentbuilder));
}
private static LiteralArgumentBuilder<CommandSourceStack> source(SoundSource p_138152_) {
return Commands.literal(p_138152_.getName())
.executes(
p_326324_ -> playSound(
p_326324_.getSource(),
getCallingPlayerAsCollection(p_326324_.getSource().getPlayer()),
ResourceLocationArgument.getId(p_326324_, "sound"),
p_138152_,
p_326324_.getSource().getPosition(),
1.0F,
1.0F,
0.0F
)
)
.then(
Commands.argument("targets", EntityArgument.players())
.executes(
p_138180_ -> playSound(
p_138180_.getSource(),
EntityArgument.getPlayers(p_138180_, "targets"),
ResourceLocationArgument.getId(p_138180_, "sound"),
p_138152_,
p_138180_.getSource().getPosition(),
1.0F,
1.0F,
0.0F
)
)
.then(
Commands.argument("pos", Vec3Argument.vec3())
.executes(
p_138177_ -> playSound(
p_138177_.getSource(),
EntityArgument.getPlayers(p_138177_, "targets"),
ResourceLocationArgument.getId(p_138177_, "sound"),
p_138152_,
Vec3Argument.getVec3(p_138177_, "pos"),
1.0F,
1.0F,
0.0F
)
)
.then(
Commands.argument("volume", FloatArgumentType.floatArg(0.0F))
.executes(
p_138174_ -> playSound(
p_138174_.getSource(),
EntityArgument.getPlayers(p_138174_, "targets"),
ResourceLocationArgument.getId(p_138174_, "sound"),
p_138152_,
Vec3Argument.getVec3(p_138174_, "pos"),
p_138174_.getArgument("volume", Float.class),
1.0F,
0.0F
)
)
.then(
Commands.argument("pitch", FloatArgumentType.floatArg(0.0F, 2.0F))
.executes(
p_138171_ -> playSound(
p_138171_.getSource(),
EntityArgument.getPlayers(p_138171_, "targets"),
ResourceLocationArgument.getId(p_138171_, "sound"),
p_138152_,
Vec3Argument.getVec3(p_138171_, "pos"),
p_138171_.getArgument("volume", Float.class),
p_138171_.getArgument("pitch", Float.class),
0.0F
)
)
.then(
Commands.argument("minVolume", FloatArgumentType.floatArg(0.0F, 1.0F))
.executes(
p_138155_ -> playSound(
p_138155_.getSource(),
EntityArgument.getPlayers(p_138155_, "targets"),
ResourceLocationArgument.getId(p_138155_, "sound"),
p_138152_,
Vec3Argument.getVec3(p_138155_, "pos"),
p_138155_.getArgument("volume", Float.class),
p_138155_.getArgument("pitch", Float.class),
p_138155_.getArgument("minVolume", Float.class)
)
)
)
)
)
)
);
}
private static Collection<ServerPlayer> getCallingPlayerAsCollection(@Nullable ServerPlayer p_334744_) {
return p_334744_ != null ? List.of(p_334744_) : List.of();
}
private static int playSound(
CommandSourceStack p_138161_,
Collection<ServerPlayer> p_138162_,
ResourceLocation p_138163_,
SoundSource p_138164_,
Vec3 p_138165_,
float p_138166_,
float p_138167_,
float p_138168_
) throws CommandSyntaxException {
Holder<SoundEvent> holder = Holder.direct(SoundEvent.createVariableRangeEvent(p_138163_));
double d0 = (double)Mth.square(holder.value().getRange(p_138166_));
int i = 0;
long j = p_138161_.getLevel().getRandom().nextLong();
for (ServerPlayer serverplayer : p_138162_) {
double d1 = p_138165_.x - serverplayer.getX();
double d2 = p_138165_.y - serverplayer.getY();
double d3 = p_138165_.z - serverplayer.getZ();
double d4 = d1 * d1 + d2 * d2 + d3 * d3;
Vec3 vec3 = p_138165_;
float f = p_138166_;
if (d4 > d0) {
if (p_138168_ <= 0.0F) {
continue;
}
double d5 = Math.sqrt(d4);
vec3 = new Vec3(serverplayer.getX() + d1 / d5 * 2.0, serverplayer.getY() + d2 / d5 * 2.0, serverplayer.getZ() + d3 / d5 * 2.0);
f = p_138168_;
}
serverplayer.connection.send(new ClientboundSoundPacket(holder, p_138164_, vec3.x(), vec3.y(), vec3.z(), f, p_138167_, j));
i++;
}
if (i == 0) {
throw ERROR_TOO_FAR.create();
} else {
if (p_138162_.size() == 1) {
p_138161_.sendSuccess(
() -> Component.translatable("commands.playsound.success.single", Component.translationArg(p_138163_), p_138162_.iterator().next().getDisplayName()), true
);
} else {
p_138161_.sendSuccess(() -> Component.translatable("commands.playsound.success.multiple", Component.translationArg(p_138163_), p_138162_.size()), true);
}
return i;
}
}
}