closes #1 realtime weather #2
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
.idea
|
||||
target
|
||||
*.iml
|
14
Realtime.iml
14
Realtime.iml
@ -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>
|
2
pom.xml
2
pom.xml
@ -46,7 +46,7 @@
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>Spigot</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>1.12</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
32
src/de/steamwar/realtime/Config.java
Normale Datei
32
src/de/steamwar/realtime/Config.java
Normale Datei
@ -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()) {
|
||||
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Config fehlt!");
|
||||
RealTime = true;
|
||||
RealWeather = false;
|
||||
} else {
|
||||
FileConfiguration config = instance.getConfig();
|
||||
RealTime = config.getBoolean("RealTime");
|
||||
RealWeather = config.getBoolean("RealWeather");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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();
|
||||
Lixfel
hat
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.
Yaruma3341
hat
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 {
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
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.