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
@@ -1,15 +1,37 @@
package fr.openmc.core.features.dream.registries.mobs;

import fr.openmc.core.OMCPlugin;
import fr.openmc.core.OMCRegistry;
import fr.openmc.core.features.dream.models.registry.DreamMob;
import fr.openmc.core.features.dream.registries.DreamItemRegistry;
import fr.openmc.core.registry.loottable.CustomLoot;
import fr.openmc.core.utils.RandomUtils;
import fr.openmc.core.utils.world.LocationUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Frog;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.Vector;

import java.util.HashMap;
import java.util.List;

public class CrazyFrog extends DreamMob<Frog> {
/**
* Ring ding ding daa baa
* Baa aramba baa bom baa barooumba
* Wh-wha-what′s going on-on?
* Ding, ding
* This is the Crazy Frog
* Ding, ding
* Bem bem!
*/
public class CrazyFrog extends DreamMob<Frog> implements Listener {

private static final HashMap<LivingEntity, BukkitTask> jumpTasks = new HashMap<>();

public CrazyFrog(String id) {
super(id,
Expand Down Expand Up @@ -37,4 +59,42 @@ public Frog spawn(Location location) {

return frog;
}

@EventHandler
public void onHit(EntityDamageByEntityEvent event) {
if (!(OMCRegistry.CUSTOM_MOBS.getMob(event.getEntity()) instanceof CrazyFrog)) return;
if (!(event.getEntity() instanceof Frog frog)) return;

if (jumpTasks.containsKey(frog)) {
cancelJumps(frog);
}

jumpTasks.put(frog, Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> {
jump(frog, RandomUtils.randomBetween(14, 15));
for (int i = 0; i <= 3; i++) {
Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> {
jump(frog, RandomUtils.randomBetween(9, 13));
}, 40L * i);
}},5L));
}

private void jump(LivingEntity entity, double distance) {
Location to = LocationUtils.randomLocation(entity.getLocation(), distance);
Location from = entity.getLocation();

double dx = to.getX() - from.getX();
double dz = to.getZ() - from.getZ();

double vy = 0.85;
double tick = (vy / 0.08) / 2;
double vx = dx / tick;
double vz = dz / tick;

entity.setVelocity(new Vector(vx, vy, vz));
}

private void cancelJumps(Frog frog) {
BukkitTask task = jumpTasks.remove(frog);
if (task != null) task.cancel();
}
}
10 changes: 10 additions & 0 deletions src/main/java/fr/openmc/core/utils/world/LocationUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@
import java.util.Random;

public class LocationUtils {
public static Location randomLocation(Location origin, double distance) {
double angle = Math.random() * 2 * Math.PI;

double x = origin.getX() + Math.cos(angle) * distance;
double z = origin.getZ() + Math.sin(angle) * distance;

Location target = new Location(origin.getWorld(), x, origin.getY(), z);
return target.getWorld().getHighestBlockAt(target).getLocation().add(0, 1, 0);
}

public static Location getSafeNearbySurface(Location location, int radius) {
World world = location.getWorld();
int baseY = location.getBlockY();
Expand Down
Loading