64 lines
2.0 KiB
Java
64 lines
2.0 KiB
Java
package engineering.wolfgirl.vfo;
|
|
|
|
import com.flowpowered.math.vector.Vector3d;
|
|
import org.spongepowered.api.Sponge;
|
|
import org.spongepowered.api.data.key.Keys;
|
|
import org.spongepowered.api.entity.living.player.Player;
|
|
import org.spongepowered.api.event.action.SleepingEvent;
|
|
import org.spongepowered.api.event.block.ChangeBlockEvent;
|
|
import org.spongepowered.api.event.entity.living.humanoid.player.RespawnPlayerEvent;
|
|
import org.spongepowered.api.event.filter.cause.First;
|
|
import org.spongepowered.api.event.item.inventory.DropItemEvent;
|
|
import org.spongepowered.api.plugin.Plugin;
|
|
import org.spongepowered.api.event.Listener;
|
|
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
|
|
import org.spongepowered.api.world.Location;
|
|
import org.spongepowered.api.world.World;
|
|
|
|
import com.google.inject.Inject;
|
|
import org.slf4j.Logger;
|
|
|
|
import java.util.Optional;
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
@Plugin(id = "vfo", name = "VFO", version = "1.0", description = "wolfgirl engineering urbex tweaks")
|
|
public class VFO {
|
|
@Inject
|
|
private Logger logger;
|
|
|
|
@Listener
|
|
public void onServerStart(GameStartedServerEvent event) {
|
|
logger.info("VFO enabled");
|
|
}
|
|
|
|
@Listener
|
|
public void onRespawn(RespawnPlayerEvent event) {
|
|
Optional<Location<World>> new_location;
|
|
|
|
while (true) {
|
|
Vector3d new_spawn_offset = new Vector3d(
|
|
ThreadLocalRandom.current().nextInt(-256, 256 + 1),
|
|
0,
|
|
ThreadLocalRandom.current().nextInt(-256, 256 + 1));
|
|
|
|
Vector3d new_spawn = event.getToTransform().getExtent().getSpawnLocation().getPosition().add(new_spawn_offset);
|
|
|
|
new_location = Sponge.getTeleportHelper().getSafeLocation(
|
|
new Location<World>(event.getToTransform().getExtent(), new_spawn), 25, 3);
|
|
|
|
if (new_location.isPresent()) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
event.setToTransform(event.getToTransform().setLocation(new_location.get()));
|
|
|
|
}
|
|
|
|
@Listener
|
|
public void onSleep(SleepingEvent event, @First Player player) {
|
|
player.offer(Keys.HEALTH, player.get(Keys.MAX_HEALTH).orElse(20.0));
|
|
}
|
|
|
|
}
|