Merge pull request #84 from yarik0chka/development

Add a changing weather id
This commit is contained in:
Melledy 2022-04-21 11:47:13 -07:00 committed by GitHub
commit 4431469334
4 changed files with 19 additions and 8 deletions

View File

@ -66,7 +66,7 @@ There is a dummy user named "Server" in every player's friends list that you can
`!pos` - Gets your current coordinate. `!pos` - Gets your current coordinate.
`!weather [weather id]` - Changes the current weather. `!weather [weather id] [climate id]` - Changes the current weather.
*More commands will be updated in the [wiki](https://github.com/Melledy/Grasscutter/wiki/).* *More commands will be updated in the [wiki](https://github.com/Melledy/Grasscutter/wiki/).*

View File

@ -8,7 +8,7 @@ import emu.grasscutter.server.packet.send.PacketSceneAreaWeatherNotify;
import java.util.List; import java.util.List;
@Command(label = "weather", usage = "weather <weatherId>", @Command(label = "weather", usage = "weather <weatherId> [climateId]",
description = "Changes the weather.", aliases = {"w"}, permission = "player.weather") description = "Changes the weather.", aliases = {"w"}, permission = "player.weather")
public final class WeatherCommand implements CommandHandler { public final class WeatherCommand implements CommandHandler {
@ -20,20 +20,22 @@ public final class WeatherCommand implements CommandHandler {
} }
if (args.size() < 1) { if (args.size() < 1) {
CommandHandler.sendMessage(sender, "Usage: weather <weatherId>"); CommandHandler.sendMessage(sender, "Usage: weather <weatherId> [climateId]");
return; return;
} }
try { try {
int weatherId = Integer.parseInt(args.get(0)); int weatherId = Integer.parseInt(args.get(0));
int climateId = args.size() > 1 ? Integer.parseInt(args.get(1)) : 1;
ClimateType climate = ClimateType.getTypeByValue(weatherId); ClimateType climate = ClimateType.getTypeByValue(climateId);
sender.getScene().setWeather(weatherId);
sender.getScene().setClimate(climate); sender.getScene().setClimate(climate);
sender.getScene().broadcastPacket(new PacketSceneAreaWeatherNotify(sender)); sender.getScene().broadcastPacket(new PacketSceneAreaWeatherNotify(sender));
CommandHandler.sendMessage(sender, "Changed weather to " + weatherId); CommandHandler.sendMessage(sender, "Changed weather to " + weatherId + " with climate " + climateId);
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
CommandHandler.sendMessage(sender, "Invalid weather ID."); CommandHandler.sendMessage(sender, "Invalid ID.");
} }
} }
} }

View File

@ -34,7 +34,8 @@ public class GenshinScene {
private int time; private int time;
private ClimateType climate; private ClimateType climate;
private int weather;
public GenshinScene(World world, SceneData sceneData) { public GenshinScene(World world, SceneData sceneData) {
this.world = world; this.world = world;
this.sceneData = sceneData; this.sceneData = sceneData;
@ -89,10 +90,18 @@ public class GenshinScene {
return climate; return climate;
} }
public int getWeather() {
return weather;
}
public void setClimate(ClimateType climate) { public void setClimate(ClimateType climate) {
this.climate = climate; this.climate = climate;
} }
public void setWeather(int weather) {
this.weather = weather;
}
public boolean isInScene(GenshinEntity entity) { public boolean isInScene(GenshinEntity entity) {
return this.entities.containsKey(entity.getId()); return this.entities.containsKey(entity.getId());
} }

View File

@ -12,7 +12,7 @@ public class PacketSceneAreaWeatherNotify extends GenshinPacket {
super(PacketOpcodes.SceneAreaWeatherNotify); super(PacketOpcodes.SceneAreaWeatherNotify);
SceneAreaWeatherNotify proto = SceneAreaWeatherNotify.newBuilder() SceneAreaWeatherNotify proto = SceneAreaWeatherNotify.newBuilder()
.setWeatherAreaId(1) .setWeatherAreaId(player.getScene().getWeather())
.setClimateType(player.getScene().getClimate().getValue()) .setClimateType(player.getScene().getClimate().getValue())
.build(); .build();