/
SpawnLootRunnable.java
72 lines (63 loc) · 2.03 KB
/
SpawnLootRunnable.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.arckenver.mightyloot.task;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;
import com.arckenver.mightyloot.ConfigHandler;
import com.arckenver.mightyloot.DataHandler;
import com.arckenver.mightyloot.MightyLootPlugin;
import com.arckenver.mightyloot.object.Loot;
import com.arckenver.mightyloot.object.LootConfig;
import com.arckenver.mightyloot.object.LootType;
public class SpawnLootRunnable implements Runnable
{
public static final int MAX_ATTEMPTS = 1000;
private LootConfig lootConfig;
public SpawnLootRunnable(LootConfig lootConfig)
{
this.lootConfig = lootConfig;
}
public void run()
{
LootType lootType = lootConfig.getRandomLootType();
World world = Sponge.getServer().getWorld(lootConfig.getWorldName()).get();
int attempt = 0;
Location<World> loc = null;
while (loc == null && attempt < MAX_ATTEMPTS)
{
attempt++;
Location<World> randomLoc = lootConfig.getArea().getRandomLoc(world);
if (!randomLoc.getBlockType().equals(BlockTypes.AIR) ||
!randomLoc.add(0, 1, 0).getBlockType().equals(BlockTypes.AIR))
{
continue;
}
if (ConfigHandler.getOptions().getNode("placeGlowstoneBelowLoot").getBoolean())
{
randomLoc = randomLoc.add(0, -1, 0);
if (!randomLoc.getBlockType().equals(BlockTypes.AIR))
{
continue;
}
}
if (ConfigHandler.getOptions().getNode("placeAlwaysOnGround").getBoolean())
{
while (randomLoc.add(0, -1, 0).getBlockType().equals(BlockTypes.AIR) && randomLoc.getBlockY() >= lootConfig.getArea().getMinY())
{
randomLoc = randomLoc.add(0, -1, 0);
}
if (randomLoc.add(0, -1, 0).getBlockType().equals(BlockTypes.AIR))
{
continue;
}
}
loc = randomLoc;
}
if (loc == null)
{
MightyLootPlugin.getLogger().info("After trying " + MAX_ATTEMPTS + " times, we could not find any good spawn location for the loot");
return;
}
DataHandler.placeLoot(new Loot(world, loc, lootType));
}
}