SteamWar/RealTime
Archiviert
13
0

closes #1 realtime weather #2

Zusammengeführt
Lixfel hat 8 Commits von weather nach master 2020-02-24 17:48:31 +01:00 zusammengeführt
5 geänderte Dateien mit 121 neuen und 70 gelöschten Zeilen

1
.gitignore vendored
Datei anzeigen

@ -1,2 +1,3 @@
.idea
target
*.iml

Datei anzeigen

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: steamwar:Spigot:1.0" level="project" />
</component>
</module>

Datei anzeigen

@ -46,7 +46,7 @@
<dependency>
<groupId>steamwar</groupId>
<artifactId>Spigot</artifactId>
<version>1.0</version>
<version>1.12</version>
<scope>provided</scope>
</dependency>
</dependencies>

Datei anzeigen

@ -0,0 +1,32 @@
package de.steamwar.realtime;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import java.io.File;
import java.util.logging.Level;
public class Config {
private Config() {}
private static Realtime instance = Realtime.getInstance();
//Cache
public static final boolean RealTime;
public static final boolean RealWeather;
static {
if(!new File(Bukkit.getWorlds().get(0).getWorldFolder(), "weather.yml").exists()) {
Review

Soweit ich mich entsinnen kann, habe ich geschrieben, dass die Config wenn aus dem Weltordner geladen werden soll, da ansonsten nur eine Einstellung pro Spielmodus möglich ist.

Soweit ich mich entsinnen kann, habe ich geschrieben, dass die Config wenn aus dem Weltordner geladen werden soll, da ansonsten nur eine Einstellung pro Spielmodus möglich ist.
Bukkit.getLogger().log(Level.SEVERE, "Config fehlt!");
RealTime = true;
RealWeather = false;
} else {
FileConfiguration config = instance.getConfig();
RealTime = config.getBoolean("RealTime");
RealWeather = config.getBoolean("RealWeather");
}
}
}

Datei anzeigen

@ -3,6 +3,8 @@ package de.steamwar.realtime;
import org.apache.commons.io.IOUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -18,19 +20,24 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Realtime extends JavaPlugin {
public class Realtime extends JavaPlugin implements Listener {
private static Realtime instance;
DateFormat dateFormat = new SimpleDateFormat("HHmm");
WeatherState oldWeatherState = null;
WeatherState weatherState = null;
@Override
public void onEnable(){
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> {
/*Date time = Calendar.getInstance().getTime();
long l = time.getHours() * 1000 + (long)(time.getMinutes() * 16.66666666666667) + (long)(time.getSeconds() * 0.1666666666666667) - 6000;
for(World w : Bukkit.getWorlds()){
w.setTime(l);
}*/
public void onEnable() {
instance = this;
PluginManager pluginManager = Bukkit.getPluginManager();
pluginManager.registerEvents(this, this);
//Zeit
DateFormat dateFormat = new SimpleDateFormat("HHmm");
//Time updater
if(Config.RealTime) {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> {
Date date = new Date();
int time = Integer.parseInt((dateFormat.format(date) + "0"));
@ -40,36 +47,20 @@ public class Realtime extends JavaPlugin {
time+= 24000;
}
//Wetter
WeatherState weatherState = getCurrentWeather();
Review

Du startest bereits einen AsyncRepeatingTask, der sofort loslegt (ohne verzögerung). Das hier verzögert das Hochfahren des Servers, und ich bin darauf bedacht, die Startzeit kurz zu halten. Bitte hier nicht initialisieren.

Du startest bereits einen AsyncRepeatingTask, der sofort loslegt (ohne verzögerung). Das hier verzögert das Hochfahren des Servers, und ich bin darauf bedacht, die Startzeit kurz zu halten. Bitte hier nicht initialisieren.
Review

Das ist doch schon gar nicht mehr im Source Code

Das ist doch schon gar nicht mehr im Source Code
for(World world : Bukkit.getWorlds()) {
for(World world : Bukkit.getWorlds())
world.setTime(time);
switch (weatherState) {
case CLEAR_SKY:
world.setThundering(false);
world.setStorm(false);
break;
case RAIN:
world.setThundering(false);
world.setStorm(true);
break;
case THUNDER_STORM:
world.setThundering(true);
world.setStorm(true);
break;
case SNOW:
world.setThundering(false);
world.setStorm(true);
//Biom muss geändert werden
}
}
}, 0, 20 * 60);
}
public WeatherState getCurrentWeather() {
//Weather Updater
if(Config.RealWeather) {
Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, () -> updateCurrentWeather(), 0, 20 * 60 * 10); //Die Wetterdaten werden bei OpenWeatherMAP nur alle 10 Minuten erneuert
}
}
private String jsonString = "";
public void updateCurrentWeather() {
/*
* https://openweathermap.org/current
@ -79,6 +70,7 @@ public class Realtime extends JavaPlugin {
* &APPID=16e8ffada1fbdbe3f3903802b0785751
*
* Berlin id: 2950159
* Düsseldorf id: 2934245
*
* ID Liste: https://openweathermap.org/weather-conditions
*
@ -88,11 +80,12 @@ public class Realtime extends JavaPlugin {
* Drizzle (Nieselregen): ID 3xx -> ^
* Thunderstorm: ID 2xx ^
*/
InputStream inputStream = null;
DataInputStream dataInputStream;
String jsonString = "";
try {
URL url = new URL("http://api.openweathermap.org/data/2.5/weather?id=2950159&APPID=16e8ffada1fbdbe3f3903802b0785751");
URL url = new URL("http://api.openweathermap.org/data/2.5/weather?id=2934245&APPID=16e8ffada1fbdbe3f3903802b0785751");
inputStream = url.openStream();
dataInputStream = new DataInputStream(new BufferedInputStream(inputStream));
@ -112,6 +105,7 @@ public class Realtime extends JavaPlugin {
IOUtils.closeQuietly(inputStream);
}
JSONObject jsonObject = (JSONObject) JSONValue.parse(jsonString);
String weather;
@ -120,17 +114,55 @@ public class Realtime extends JavaPlugin {
JSONObject arrayObject = (JSONObject) jsonArray.get(0);
weather = String.valueOf((int) (long) arrayObject.get("id"));
oldWeatherState = weatherState;
String firstChar = Character.toString(weather.charAt(0));
switch (firstChar) {
case "6":
return WeatherState.SNOW;
weatherState = WeatherState.SNOW;
break;
case "5": case "3": //3 = Drizzle
return WeatherState.RAIN;
weatherState = WeatherState.RAIN;
break;
case "2":
return WeatherState.THUNDER_STORM;
weatherState = WeatherState.THUNDER_STORM;
break;
default:
return WeatherState.CLEAR_SKY; //case 8 ebenfalls CLEAR_SKY
weatherState = WeatherState.CLEAR_SKY; //case 8 ebenfalls CLEAR_SKY
break;
}
//Weltänderungen
Bukkit.getScheduler().scheduleSyncDelayedTask(getInstance(), () -> {
if(oldWeatherState != null && oldWeatherState == weatherState)
return;
for(World world : Bukkit.getWorlds()) {
switch (weatherState) {
case CLEAR_SKY:
world.setThundering(false);
world.setStorm(false);
break;
case RAIN:
case SNOW:
world.setThundering(false);
world.setStorm(true);
break;
case THUNDER_STORM:
world.setThundering(true);
world.setStorm(true);
break;
}
}
}, 0);
}
public void shutdown(final String reason) {
Bukkit.getOnlinePlayers().forEach(player -> player.kickPlayer(reason));
Bukkit.shutdown();
}
public static Realtime getInstance() {
return instance;
}
enum WeatherState {