Safe teleport

This commit is contained in:
Lennart ten Wolde 2018-06-05 19:09:30 +02:00
parent b06c62e343
commit 2bd8bbdec8
3 changed files with 136 additions and 10 deletions

View File

@ -2,8 +2,8 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="6524ab32-4c67-47a4-9559-a55b4c68fe83" name="Default" comment="">
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandTeleport.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandTeleport.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/target/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@ -27,8 +27,48 @@
<file leaf-file-name="CommandTeleport.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandTeleport.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="14" column="13" selection-start-line="14" selection-start-column="13" selection-end-line="14" selection-end-column="13" />
<state relative-caret-position="663">
<caret line="50" column="9" lean-forward="true" selection-start-line="50" selection-start-column="9" selection-end-line="50" selection-end-column="9" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Message.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="493">
<caret line="56" column="90" selection-start-line="56" selection-start-column="90" selection-end-line="56" selection-end-column="90" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Location.java" pinned="false" current-in-tab="false">
<entry file="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.11.2-R0.1-SNAPSHOT/spigot-api-1.11.2-R0.1-20170514.012204-124-sources.jar!/org/bukkit/Location.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="442">
<caret line="86" column="25" selection-start-line="86" selection-start-column="25" selection-end-line="86" selection-end-column="25" />
<folding>
<element signature="e#2486#2487#0" expanded="true" />
<element signature="e#2531#2532#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="World.java" pinned="false" current-in-tab="false">
<entry file="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.11.2-R0.1-SNAPSHOT/spigot-api-1.11.2-R0.1-20170514.012204-124-sources.jar!/org/bukkit/World.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="46" column="17" selection-start-line="46" selection-start-column="17" selection-end-line="46" selection-end-column="17" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="pom.xml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="612">
<caret line="36" column="35" lean-forward="true" selection-start-line="36" selection-start-column="35" selection-end-line="36" selection-end-column="35" />
</state>
</provider>
</entry>
@ -63,6 +103,8 @@
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java" />
<option value="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java" />
<option value="$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandTeleport.java" />
</list>
</option>
</component>
@ -256,12 +298,12 @@
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1528215872017</updated>
<workItem from="1528215876300" duration="1197000" />
<workItem from="1528215876300" duration="2683000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="1197000" />
<option name="totallyTimeSpent" value="2683000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="2576" height="1416" extended-state="6" />
@ -373,10 +415,42 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="612">
<caret line="36" column="35" lean-forward="true" selection-start-line="36" selection-start-column="35" selection-end-line="36" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.11.2-R0.1-SNAPSHOT/spigot-api-1.11.2-R0.1-20170514.012204-124-sources.jar!/org/bukkit/Location.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="442">
<caret line="86" column="25" selection-start-line="86" selection-start-column="25" selection-end-line="86" selection-end-column="25" />
<folding>
<element signature="e#2486#2487#0" expanded="true" />
<element signature="e#2531#2532#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.11.2-R0.1-SNAPSHOT/spigot-api-1.11.2-R0.1-20170514.012204-124-sources.jar!/org/bukkit/World.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="46" column="17" selection-start-line="46" selection-start-column="17" selection-end-line="46" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="493">
<caret line="56" column="90" selection-start-line="56" selection-start-column="90" selection-end-line="56" selection-end-column="90" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandTeleport.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="14" column="13" selection-start-line="14" selection-start-column="13" selection-end-line="14" selection-end-column="13" />
<state relative-caret-position="663">
<caret line="50" column="9" lean-forward="true" selection-start-line="50" selection-start-column="9" selection-end-line="50" selection-end-column="9" />
</state>
</provider>
</entry>

View File

@ -5,14 +5,19 @@ import com.lenis0012.bukkit.marriage2.MPlayer;
import com.lenis0012.bukkit.marriage2.Marriage;
import com.lenis0012.bukkit.marriage2.config.Message;
import com.lenis0012.bukkit.marriage2.config.Settings;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
/**
* Created by Lennart on 7/9/2015.
*/
public class CommandTeleport extends Command {
private static final List<Material> UNSAFE_TYPES = Arrays.asList(Material.LAVA, Material.STATIONARY_LAVA, Material.CACTUS);
public CommandTeleport(Marriage marriage) {
super(marriage, "tp");
@ -35,9 +40,55 @@ public class CommandTeleport extends Command {
return;
}
Location destination = partner.getLocation();
if(player.getGameMode() != GameMode.CREATIVE) {
destination = getSafeLocation(destination);
}
if(destination == null) {
reply(Message.TELEPORT_UNSAFE);
return;
}
if(!payFee()) return;
player.teleport(partner);
reply(Message.TELEPORTED);
partner.sendMessage(ChatColor.translateAlternateColorCodes('&', Message.TELEPORTED_2.toString()));
}
private Location getSafeLocation(Location destination) {
World world = destination.getWorld();
Block block = destination.getBlock();
if(block == null || block.getY() < 0 || block.getY() > world.getMaxHeight()) {
return null; // Out of bounds, cant teleport to void or from a bizarre height.
}
if(isSafeGround(block.getRelative(BlockFace.DOWN))) {
return destination; // Current destination is valid
}
// Find next potentially safe block
while(!block.getType().isSolid() && block.getY() > 0) {
block = block.getRelative(BlockFace.DOWN);
if(UNSAFE_TYPES.contains(block.getType())) {
return null; // Obstructed by unsafe block
}
}
if(!isSafeGround(block)) {
return null; // Still not safe
}
// Safe
Location target = destination.clone();
target.setY(block.getY() + 1);
return target;
}
private boolean isSafeGround(Block block) {
return block.getType().isSolid()
&& !UNSAFE_TYPES.contains(block.getRelative(0, 1, 0).getType())
&& !UNSAFE_TYPES.contains(block.getRelative(0, 2, 0).getType()
}
}

View File

@ -54,6 +54,7 @@ public enum Message {
BONUS_EXP("&aYou gained %s extra EXP for leveling with your partner!"),
CONFIG_RELOAD("&aConfiguration settings were reloaded, please note that some settings may not apply until reboot."),
GENDER_ALREADY_CHANGED("&cYou have already specified your gender, you can only do this once."),
TELEPORT_UNSAFE("The location you are trying to teleport to is unsafe or obstructed"),
// COMMANDS
COMMAND_MARRY("Request a marriage with another player"),