Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.openmc.core.OMCPlugin;
import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.models.db.DBDreamPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
Expand Down Expand Up @@ -35,8 +36,6 @@ public void onPlayerSleep(PlayerBedEnterEvent event) {

if (randomValue < DreamManager.calculateDreamProbability(player)) return;

DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player);

player.addPotionEffect(new PotionEffect(
PotionEffectType.NAUSEA,
20 * 10,
Expand All @@ -46,20 +45,26 @@ public void onPlayerSleep(PlayerBedEnterEvent event) {
false
));

new BukkitRunnable() {
@Override
public void run() {
if (dbDreamPlayer == null || (dbDreamPlayer.getDreamX() == null || dbDreamPlayer.getDreamY() == null || dbDreamPlayer.getDreamZ() == null)) {
DreamManager.tpPlayerDream(player);
} else {
DreamManager.tpPlayerToLastDreamLocation(player);
}
}
}.runTaskLater(OMCPlugin.getInstance(), 20L * 5);
}

@EventHandler
public void onNightSkip(TimeSkipEvent event) {

for (UUID uuid : playersDreaming) {
Player player = Bukkit.getPlayer(uuid);
if (player == null) continue;
DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player);
new BukkitRunnable() {
@Override
public void run() {
if (dbDreamPlayer == null || (dbDreamPlayer.getDreamX() == null || dbDreamPlayer.getDreamY() == null || dbDreamPlayer.getDreamZ() == null)) {
DreamManager.tpPlayerDream(player);
} else {
DreamManager.tpPlayerToLastDreamLocation(player);
}
}
}.runTaskLater(OMCPlugin.getInstance(), 20L * 5);
}
if (event.getSkipReason() == TimeSkipEvent.SkipReason.NIGHT_SKIP) playersDreaming.clear();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public void onEntityDeath(EntityDeathEvent event) {
DreamMob dreamMob = DreamMobsRegistry.getFromEntity(entity);
if (dreamMob == null) return;

if (dreamMob.getDreamLoots() == null) return;

for (DreamLoot loot : dreamMob.getDreamLoots()) {
if (Math.random() >= loot.chance()) return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;

Expand All @@ -33,12 +34,7 @@ public Soul() {
3L,
RandomUtils.randomBetween(0.4, 0.5),
RandomUtils.randomBetween(0.7, 0.9),
List.of(new DreamLoot(
DreamItemRegistry.getByName("omc_dream:soul"),
0.70,
2,
3
))
null
);
}

Expand Down Expand Up @@ -96,6 +92,13 @@ public LivingEntity spawn(Location location) {
return vex;
}

private final List<DreamLoot> loots = List.of(new DreamLoot(
DreamItemRegistry.getByName("omc_dream:soul"),
0.70,
1,
2
));

private void registerSoulLink(Vex vex, ArmorStand stand) {
Bukkit.getPluginManager().registerEvent(EntityDamageEvent.class, new Listener() {
}, EventPriority.NORMAL, (listener, event) -> {
Expand All @@ -118,8 +121,22 @@ private void registerSoulLink(Vex vex, ArmorStand stand) {
Entity dead = e.getEntity();
if (dead.equals(vex) && stand.isValid()) {
stand.remove();
for (DreamLoot loot : loots) {
if (Math.random() >= loot.chance()) return;

int amount = loot.minAmount() + (int) (Math.random() * (loot.maxAmount() - loot.minAmount() + 1));
ItemStack drop = loot.item().getBest().asQuantity(amount);
dead.getWorld().dropItemNaturally(dead.getLocation(), drop);
}
} else if (dead.equals(stand) && vex.isValid()) {
vex.remove();
for (DreamLoot loot : loots) {
if (Math.random() >= loot.chance()) return;

int amount = loot.minAmount() + (int) (Math.random() * (loot.maxAmount() - loot.minAmount() + 1));
ItemStack drop = loot.item().getBest().asQuantity(amount);
dead.getWorld().dropItemNaturally(dead.getLocation(), drop);
}
}
}, OMCPlugin.getInstance());

Expand Down
Loading