diff --git a/src/main/java/com/skcraft/plume/module/Spawn.java b/src/main/java/com/skcraft/plume/module/Spawn.java new file mode 100644 index 0000000..a9dc10a --- /dev/null +++ b/src/main/java/com/skcraft/plume/module/Spawn.java @@ -0,0 +1,71 @@ +package com.skcraft.plume.module; + +import com.sk89q.intake.Command; +import com.sk89q.intake.Require; +import com.skcraft.plume.command.Sender; +import com.skcraft.plume.common.util.config.Config; +import com.skcraft.plume.common.util.config.InjectConfig; +import com.skcraft.plume.common.util.module.Module; +import com.skcraft.plume.util.Messages; +import com.skcraft.plume.util.TeleportHelper; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import ninja.leaping.configurate.objectmapping.Setting; + +import static com.skcraft.plume.common.util.SharedLocale.tr; + +@Module(name = "spawn", desc = "Set a server spawn for players to teleport to") +public class Spawn { + + @InjectConfig("spawn") private Config config; + + @Command(aliases = "spawn", desc = "Teleport to the server spawn") + @Require("plume.spawn") + public void spawn(@Sender EntityPlayerMP player) { + TeleportHelper.teleport(player, config.get().x, config.get().y, config.get().z, config.get().dimension, config.get().yaw, config.get().pitch); + player.addChatMessage(Messages.info(tr("spawn.success"))); + } + + @Command(aliases = "setspawn", desc = "Set the server spawn") + @Require("plume.spawn.set") + public void setspawn(@Sender EntityPlayerMP player) { + config.get().dimension = player.dimension; + config.get().x = player.posX; + config.get().y = player.posY; + config.get().z = player.posZ; + config.get().yaw = player.rotationYaw; + config.get().pitch = player.rotationPitch; + config.save(); + + player.addChatMessage(Messages.info(tr("spawn.set"))); + } + + @SubscribeEvent + public void playerRespawn(PlayerEvent.PlayerRespawnEvent event) { + EntityPlayerMP player = (EntityPlayerMP) event.player; + player.playerNetServerHandler.playerEntity = player; + TeleportHelper.teleport(player, config.get().x, config.get().y, config.get().z, config.get().dimension, config.get().yaw, config.get().pitch); + } + + private static class SpawnConfig { + @Setting(comment = "Dimension ID") + public int dimension = 0; + + @Setting(comment = "X coordinate") + public double x = 0; + + @Setting(comment = "Y coordinate") + public double y = 80; + + @Setting(comment = "Z coordinate") + public double z = 0; + + @Setting(comment = "Yaw") + public float yaw = 0; + + @Setting(comment = "Pitch") + public float pitch = 0; + } +} diff --git a/src/main/java/com/skcraft/plume/util/TeleportHelper.java b/src/main/java/com/skcraft/plume/util/TeleportHelper.java index 5d547ed..4d390c8 100644 --- a/src/main/java/com/skcraft/plume/util/TeleportHelper.java +++ b/src/main/java/com/skcraft/plume/util/TeleportHelper.java @@ -18,11 +18,15 @@ public static void teleport(EntityPlayerMP player, EntityPlayerMP target) { } public static void teleport(EntityPlayerMP player, double x, double y, double z, int dimension) { + teleport(player, x, y, z, dimension, player.rotationYaw, player.rotationPitch); + } + + public static void teleport(EntityPlayerMP player, double x, double y, double z, int dimension, float yaw, float pitch) { if(player.dimension != dimension) { MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension(player, dimension, new BasicTeleporter(DimensionManager.getWorld(dimension))); } - //TODO: allow pitch and yaw to be set - player.playerNetServerHandler.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); + + player.playerNetServerHandler.setPlayerLocation(x, y, z, yaw, pitch); } public static class BasicTeleporter extends Teleporter { diff --git a/src/main/resources/com/skcraft/plume/lang/Plume.properties b/src/main/resources/com/skcraft/plume/lang/Plume.properties index ba04b8d..b7eae9e 100755 --- a/src/main/resources/com/skcraft/plume/lang/Plume.properties +++ b/src/main/resources/com/skcraft/plume/lang/Plume.properties @@ -150,3 +150,6 @@ logger.details.location= logger.details.time=§eTime\: §b{0} logger.items.noItems=The specified record has no items to give. logger.items.inventoryName=Logged Items + +spawn.set=Spawn has been set to your current position. +spawn.success=You have been sent to spawn. \ No newline at end of file