mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-12-01 06:53:26 +01:00
Weather game rules; resolves #237
This commit is contained in:
parent
7bbee750b4
commit
f92a004fcb
@ -46,13 +46,16 @@ public class GameRuleProvider {
|
|||||||
DEFAULT_VALUES.keepInventoryOnDeath = true;
|
DEFAULT_VALUES.keepInventoryOnDeath = true;
|
||||||
DEFAULT_VALUES.lobbyDisabled = false;
|
DEFAULT_VALUES.lobbyDisabled = false;
|
||||||
|
|
||||||
/* World interaction */
|
/* World */
|
||||||
DEFAULT_VALUES.gameMode = GameMode.SURVIVAL;
|
DEFAULT_VALUES.gameMode = GameMode.SURVIVAL;
|
||||||
DEFAULT_VALUES.breakBlocks = false;
|
DEFAULT_VALUES.breakBlocks = false;
|
||||||
DEFAULT_VALUES.breakPlacedBlocks = false;
|
DEFAULT_VALUES.breakPlacedBlocks = false;
|
||||||
DEFAULT_VALUES.breakWhitelist = null;
|
DEFAULT_VALUES.breakWhitelist = null;
|
||||||
DEFAULT_VALUES.placeBlocks = false;
|
DEFAULT_VALUES.placeBlocks = false;
|
||||||
DEFAULT_VALUES.placeWhitelist = null;
|
DEFAULT_VALUES.placeWhitelist = null;
|
||||||
|
DEFAULT_VALUES.rain = null;
|
||||||
|
DEFAULT_VALUES.thunder = null;
|
||||||
|
DEFAULT_VALUES.time = null;
|
||||||
|
|
||||||
/* Fighting */
|
/* Fighting */
|
||||||
DEFAULT_VALUES.playerVersusPlayer = false;
|
DEFAULT_VALUES.playerVersusPlayer = false;
|
||||||
@ -98,13 +101,16 @@ public class GameRuleProvider {
|
|||||||
protected Boolean keepInventoryOnDeath;
|
protected Boolean keepInventoryOnDeath;
|
||||||
protected Boolean lobbyDisabled;
|
protected Boolean lobbyDisabled;
|
||||||
|
|
||||||
/* World interaction */
|
/* World */
|
||||||
protected GameMode gameMode;
|
protected GameMode gameMode;
|
||||||
protected Boolean breakBlocks;
|
protected Boolean breakBlocks;
|
||||||
protected Boolean breakPlacedBlocks;
|
protected Boolean breakPlacedBlocks;
|
||||||
protected Map<Material, HashSet<Material>> breakWhitelist;
|
protected Map<Material, HashSet<Material>> breakWhitelist;
|
||||||
protected Boolean placeBlocks;
|
protected Boolean placeBlocks;
|
||||||
protected Set<Material> placeWhitelist;
|
protected Set<Material> placeWhitelist;
|
||||||
|
protected Boolean rain;
|
||||||
|
protected Boolean thunder;
|
||||||
|
protected Long time;
|
||||||
|
|
||||||
/* Fighting */
|
/* Fighting */
|
||||||
protected Boolean playerVersusPlayer;
|
protected Boolean playerVersusPlayer;
|
||||||
@ -183,7 +189,7 @@ public class GameRuleProvider {
|
|||||||
return lobbyDisabled;
|
return lobbyDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// World interaction
|
// World
|
||||||
/**
|
/**
|
||||||
* @return the gameMode
|
* @return the gameMode
|
||||||
*/
|
*/
|
||||||
@ -226,6 +232,56 @@ public class GameRuleProvider {
|
|||||||
return placeWhitelist;
|
return placeWhitelist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
* if it's raining permanently in this dungeon,
|
||||||
|
* null if random
|
||||||
|
*/
|
||||||
|
public Boolean isRaining() {
|
||||||
|
return rain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param rain
|
||||||
|
* set if it's raining permanently in this dungeon
|
||||||
|
*/
|
||||||
|
public void setRaining(Boolean rain) {
|
||||||
|
this.rain = rain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
* You've been... THUNDERSTRUCK!
|
||||||
|
*/
|
||||||
|
public Boolean isThundering() {
|
||||||
|
return thunder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param thunder
|
||||||
|
* You've been... THUNDERSTRUCK!
|
||||||
|
*/
|
||||||
|
public void setThundering(Boolean thunder) {
|
||||||
|
this.thunder = thunder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
* the locked day time in this dungeon,
|
||||||
|
* null if not locked
|
||||||
|
*/
|
||||||
|
public Long getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param time
|
||||||
|
* the locked day time to set
|
||||||
|
*/
|
||||||
|
public void setTime(Long time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
// Fight
|
// Fight
|
||||||
/**
|
/**
|
||||||
* @return if players may attack each other
|
* @return if players may attack each other
|
||||||
@ -609,7 +665,7 @@ public class GameRuleProvider {
|
|||||||
lobbyDisabled = defaultValues.lobbyDisabled;
|
lobbyDisabled = defaultValues.lobbyDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* World interaction */
|
/* World */
|
||||||
if (gameMode == null) {
|
if (gameMode == null) {
|
||||||
gameMode = defaultValues.gameMode;
|
gameMode = defaultValues.gameMode;
|
||||||
}
|
}
|
||||||
@ -634,6 +690,18 @@ public class GameRuleProvider {
|
|||||||
placeWhitelist = defaultValues.placeWhitelist;
|
placeWhitelist = defaultValues.placeWhitelist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rain == null) {
|
||||||
|
rain = defaultValues.rain;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thunder == null) {
|
||||||
|
thunder = defaultValues.thunder;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time == null) {
|
||||||
|
time = defaultValues.time;
|
||||||
|
}
|
||||||
|
|
||||||
/* Fighting */
|
/* Fighting */
|
||||||
if (playerVersusPlayer == null) {
|
if (playerVersusPlayer == null) {
|
||||||
playerVersusPlayer = defaultValues.playerVersusPlayer;
|
playerVersusPlayer = defaultValues.playerVersusPlayer;
|
||||||
@ -755,7 +823,7 @@ public class GameRuleProvider {
|
|||||||
} else if (defaultValues.secureObjects != null) {
|
} else if (defaultValues.secureObjects != null) {
|
||||||
secureObjects.addAll(defaultValues.secureObjects);
|
secureObjects.addAll(defaultValues.secureObjects);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groupTagEnabled == null) {
|
if (groupTagEnabled == null) {
|
||||||
groupTagEnabled = defaultValues.groupTagEnabled;
|
groupTagEnabled = defaultValues.groupTagEnabled;
|
||||||
}
|
}
|
||||||
|
@ -767,6 +767,7 @@ public class DGroup {
|
|||||||
}
|
}
|
||||||
game.fetchRules();
|
game.fetchRules();
|
||||||
GameRuleProvider rules = game.getRules();
|
GameRuleProvider rules = game.getRules();
|
||||||
|
gameWorld.setWeather(rules);
|
||||||
|
|
||||||
color = plugin.getMainConfig().getGroupColorPriority().get(game.getDGroups().indexOf(this));
|
color = plugin.getMainConfig().getGroupColorPriority().get(game.getDGroups().indexOf(this));
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ package io.github.dre2n.dungeonsxl.world;
|
|||||||
|
|
||||||
import de.erethon.commons.chat.MessageUtil;
|
import de.erethon.commons.chat.MessageUtil;
|
||||||
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
||||||
|
import io.github.dre2n.dungeonsxl.game.GameRuleProvider;
|
||||||
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -126,6 +127,31 @@ public abstract class DInstanceWorld {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param rules
|
||||||
|
* sets up the time and weather to match the rules
|
||||||
|
*/
|
||||||
|
public void setWeather(GameRuleProvider rules) {
|
||||||
|
if (world == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rules.isThundering() != null) {
|
||||||
|
if (rules.isThundering()) {
|
||||||
|
world.setThundering(true);
|
||||||
|
world.setStorm(true);
|
||||||
|
world.setThunderDuration(Integer.MAX_VALUE);
|
||||||
|
} else {
|
||||||
|
world.setThundering(false);
|
||||||
|
world.setStorm(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rules.getTime() != null) {
|
||||||
|
world.setTime(rules.getTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Abstracts */
|
/* Abstracts */
|
||||||
/**
|
/**
|
||||||
* Deletes this instance.
|
* Deletes this instance.
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.dre2n.dungeonsxl.world;
|
package io.github.dre2n.dungeonsxl.world;
|
||||||
|
|
||||||
|
import io.github.dre2n.dungeonsxl.game.Game;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
@ -141,8 +142,16 @@ public class DWorldListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWeatherChange(WeatherChangeEvent event) {
|
public void onWeatherChange(WeatherChangeEvent event) {
|
||||||
if (dWorlds.getInstanceByWorld(event.getWorld()) != null) {
|
DInstanceWorld dWorld = dWorlds.getInstanceByWorld(event.getWorld());
|
||||||
if (event.toWeatherState()) {
|
if (dWorld instanceof DEditWorld && event.toWeatherState()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
} else if (dWorld instanceof DGameWorld) {
|
||||||
|
Game game = Game.getByGameWorld((DGameWorld) dWorld);
|
||||||
|
Boolean raining = game.getRules().isRaining();
|
||||||
|
if (raining == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((raining && !event.toWeatherState()) || (!raining && event.toWeatherState())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ public class WorldConfig extends GameRuleProvider {
|
|||||||
keepInventoryOnDeath = configFile.getBoolean("keepInventoryOnDeath");
|
keepInventoryOnDeath = configFile.getBoolean("keepInventoryOnDeath");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* World interaction */
|
/* World */
|
||||||
if (configFile.contains("gameMode")) {
|
if (configFile.contains("gameMode")) {
|
||||||
if (EnumUtil.isValidEnum(GameMode.class, configFile.getString("gameMode").toUpperCase())) {
|
if (EnumUtil.isValidEnum(GameMode.class, configFile.getString("gameMode").toUpperCase())) {
|
||||||
gameMode = GameMode.valueOf(configFile.getString("gameMode"));
|
gameMode = GameMode.valueOf(configFile.getString("gameMode"));
|
||||||
@ -184,6 +184,18 @@ public class WorldConfig extends GameRuleProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configFile.contains("rain")) {
|
||||||
|
rain = configFile.getBoolean("rain");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configFile.contains("thunder")) {
|
||||||
|
thunder = configFile.getBoolean("thunder");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configFile.contains("time")) {
|
||||||
|
time = configFile.getLong("time");
|
||||||
|
}
|
||||||
|
|
||||||
/* PvP */
|
/* PvP */
|
||||||
if (configFile.contains("playerVersusPlayer")) {
|
if (configFile.contains("playerVersusPlayer")) {
|
||||||
playerVersusPlayer = configFile.getBoolean("playerVersusPlayer");
|
playerVersusPlayer = configFile.getBoolean("playerVersusPlayer");
|
||||||
|
Loading…
Reference in New Issue
Block a user