forked from Upstream/mmocore
!API stuff for loot chests
This commit is contained in:
parent
9105a8744a
commit
6ae069f651
48
src/main/java/net/Indyuce/mmocore/api/loot/ChestTier.java
Normal file
48
src/main/java/net/Indyuce/mmocore/api/loot/ChestTier.java
Normal file
@ -0,0 +1,48 @@
|
||||
package net.Indyuce.mmocore.api.loot;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import net.Indyuce.mmocore.api.util.math.particle.ChestParticleEffect;
|
||||
|
||||
public class ChestTier {
|
||||
private final TierEffect effect;
|
||||
private final int weight;
|
||||
|
||||
public ChestTier(ConfigurationSection config) {
|
||||
effect = config.isConfigurationSection("effect") ? new TierEffect(config.getConfigurationSection("effect"))
|
||||
: null;
|
||||
weight = config.getInt("weight", 1);
|
||||
}
|
||||
|
||||
public int getWeight() {
|
||||
return weight;
|
||||
}
|
||||
|
||||
public boolean hasEffect() {
|
||||
return effect != null;
|
||||
}
|
||||
|
||||
public TierEffect getEffect() {
|
||||
return effect;
|
||||
}
|
||||
|
||||
public class TierEffect {
|
||||
private final ChestParticleEffect type;
|
||||
private final Particle particle;
|
||||
|
||||
public TierEffect(ConfigurationSection config) {
|
||||
Validate.notNull(config, "Could not load tier config");
|
||||
type = ChestParticleEffect
|
||||
.valueOf(config.getString("type", "OFFSET").toUpperCase().replace("-", "_").replace(" ", "_"));
|
||||
particle = Particle
|
||||
.valueOf(config.getString("particle", "FLAME").toUpperCase().replace("-", "_").replace(" ", "_"));
|
||||
}
|
||||
|
||||
public void play(Location loc) {
|
||||
type.play(loc, particle);
|
||||
}
|
||||
}
|
||||
}
|
45
src/main/java/net/Indyuce/mmocore/api/loot/LootChest.java
Normal file
45
src/main/java/net/Indyuce/mmocore/api/loot/LootChest.java
Normal file
@ -0,0 +1,45 @@
|
||||
package net.Indyuce.mmocore.api.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
public class LootChest {
|
||||
private final LootChestRegion region;
|
||||
|
||||
/*
|
||||
* saves data of block replaced
|
||||
*/
|
||||
private final ReplacedBlock block;
|
||||
|
||||
public LootChest(LootChestRegion region, Block block) {
|
||||
this.region = region;
|
||||
this.block = new ReplacedBlock(block);
|
||||
}
|
||||
|
||||
public ReplacedBlock getBlock() {
|
||||
return block;
|
||||
}
|
||||
|
||||
public LootChestRegion getRegion() {
|
||||
return region;
|
||||
}
|
||||
|
||||
public class ReplacedBlock {
|
||||
private final Material material;
|
||||
private final BlockData data;
|
||||
private final Location loc;
|
||||
|
||||
public ReplacedBlock(Block block) {
|
||||
this.material = block.getType();
|
||||
this.data = block.getBlockData();
|
||||
loc = block.getLocation();
|
||||
}
|
||||
|
||||
public void restore() {
|
||||
loc.getBlock().setType(material);
|
||||
loc.getBlock().setBlockData(data);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package net.Indyuce.mmocore.api.loot;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
|
||||
public class LootChestRegion {
|
||||
private final String id;
|
||||
|
||||
private final long chestSpawnPeriod;
|
||||
private final RegionBounds bounds;
|
||||
private final Set<ChestTier> tiers = new HashSet<>();
|
||||
|
||||
/*
|
||||
* last time
|
||||
*/
|
||||
|
||||
public LootChestRegion(ConfigurationSection config) {
|
||||
Validate.notNull(config, "Could not load config");
|
||||
id = config.getName();
|
||||
|
||||
bounds = new RegionBounds(config.getConfigurationSection("bounds"));
|
||||
chestSpawnPeriod = config.getInt("spawn-period");
|
||||
|
||||
Validate.isTrue(config.isConfigurationSection("tiers"), "Could not find chest tiers");
|
||||
for (String key : config.getConfigurationSection("tiers").getKeys(false))
|
||||
try {
|
||||
tiers.add(new ChestTier(config.getConfigurationSection("tiers." + key)));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
MMOCore.plugin.getLogger().log(Level.WARNING,
|
||||
"Could not load tier '" + key + "' from chest region '" + id + "': " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Set<ChestTier> getTiers() {
|
||||
return tiers;
|
||||
}
|
||||
|
||||
public RegionBounds getBounds() {
|
||||
return bounds;
|
||||
}
|
||||
|
||||
public long getChestSpawnPeriod() {
|
||||
return chestSpawnPeriod;
|
||||
}
|
||||
}
|
53
src/main/java/net/Indyuce/mmocore/api/loot/RegionBounds.java
Normal file
53
src/main/java/net/Indyuce/mmocore/api/loot/RegionBounds.java
Normal file
@ -0,0 +1,53 @@
|
||||
package net.Indyuce.mmocore.api.loot;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class RegionBounds {
|
||||
private final World world;
|
||||
private final int x1, z1, x2, z2;
|
||||
|
||||
private static final Random random = new Random();
|
||||
|
||||
public RegionBounds(ConfigurationSection config) {
|
||||
Validate.notNull(config, "Could not load config");
|
||||
Validate.notNull(world = Bukkit.getWorld(config.getString("world")),
|
||||
"Could not find world " + config.getString("world"));
|
||||
x1 = config.getInt("x1");
|
||||
z1 = config.getInt("z1");
|
||||
|
||||
x2 = config.getInt("x2");
|
||||
z2 = config.getInt("z2");
|
||||
}
|
||||
|
||||
public RegionBounds(Location loc1, Location loc2) {
|
||||
Validate.isTrue(loc1.getWorld().equals(loc2.getWorld()), "Locations must be in the same world");
|
||||
world = loc1.getWorld();
|
||||
x1 = loc1.getBlockX();
|
||||
z1 = loc1.getBlockZ();
|
||||
|
||||
x2 = loc2.getBlockX();
|
||||
z2 = loc2.getBlockZ();
|
||||
}
|
||||
|
||||
public boolean isInRegion(Player player) {
|
||||
int x = player.getLocation().getBlockX();
|
||||
int z = player.getLocation().getBlockZ();
|
||||
return player.getWorld().equals(world) && x1 <= x && x2 >= x && z1 <= z && z2 >= z;
|
||||
}
|
||||
|
||||
public Location findChestLocation() {
|
||||
|
||||
Optional<Player> player = world.getPlayers().stream().filter(check -> isInRegion(check)).findAny();
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user